??xml version="1.0" encoding="utf-8" standalone="yes"?>assume cs:code,ds:data
;数据D?br />
;----------------------------------------------
data segment
data ends
;代码D?br />
;----------------------------------------------
code segment
start:
;安装do0子程序到0:200h
;----------------------------------------------
mov ax,cs ;D寄存器之间不准直接传递数?br />
mov ds,ax
mov si,offset do0
mov ax,0
mov es,ax
mov di,200h
;movsbds:si指向的内存单元中的字节送入es:di?br />
;if(DF==0){ si++;di++} else{si--,di--}
mov cx,offset do0end-offset do0 ;讄复制代码的长?br />
cld ;DF=0
rep movsb ;{h于while(cx--!=0) movsb;
;讄中断E序0指向0:200h?br />
;--------------------------------
mov ax,0
mov es,ax
;中断向量占两个字,高字地址存放D地址,低字地址存放偏移地址
mov word ptr es:[0*4],200h
mov word ptr es:[0*4+2],0
;调用0号中?br />
;---------------------------------
int 0
;E序q回dos
mov ax,4c00h
int 21h
;do0子程?昄字符?hello world!"
;----------------------------------
do0:
jmp short do0start
db "hello world!"
do0start:
mov ax,0b800h ;0b800h地址为显存地址
mov es,ax
mov di,12*160+36*2
mov ax,cs
mov ds,ax
mov si,202h
mov cx,12
s:mov al,[si]
mov es:[di],al
inc si
add di,2
loop s
mov ax,4c00h
int 21h
do0end:nop
code ends
end start
]]>
MOV AL,050AH Q非法指令:050Ah为字Q而AL为字?br />寄存器有明确的字节或字类型,有寄存器参与的指令其操作数类型就是寄存器的类型。对于存储器单元与立x同时作ؓ操作数的情况Q必L式指明。用byte ptr指示字节cdQ用word ptr指示字类型?br />2. 两个操作C能都是存储器Q传送指令很灉|Q但d之间的直接传送却不允?br />8086指opȝ不允怸个操作数都是存储单元Q除串操作指令)Q没有主存至d的数据传送。要实现q种传送,可通过寄存器间接实现?br />3. D寄存器的操作有一些限ӞD寄存器属专用寄存器Q对他们的操作能力有?br />不允许立x传送给D寄存器Q例如:
MOV DS,100H Q非法指令:立即C能传送段寄存?br />不要直接改变CS|例如Q?br />MOV CS,[SI] Q不允许使用的指?br />不允许段寄存器之间的直接数据传送,例如Q?br />MOV DS,ES Q非法指令:不允许段寄存器间传?img src ="http://www.aygfsteel.com/xfan/aggbug/55235.html" width = "1" height = "1" />
]]>
1.R
1)查看当前所有寄存器. r
2)改变寄存器的?/SPAN>. r axà输入数据
2.D
1)查看内存的?/SPAN>. d D地址:偏移地址 ?/SPAN> d(昄~省地址)
3.E
1)改写内存的?/SPAN>. eD地址:偏移地址à回Rà输入数据(数值或字符)
eD地址:偏移地址 数据(数值或字符?/SPAN>)à回R
4.U
1)查看机器码的汇编指o. u D地址:偏移地址
5.T
1)执行指o. t(?/SPAN>CS:IP处执行指?/SPAN>)
6.A
1)以汇~指令Ş式在内存中写入机器码. a D地址:偏移地址à回Rà输入汇编E序
在学?/SPAN>80x86Ӟl习汇编指o的用法推荐用emu8086.复杂汇编E序推荐?/SPAN>radasm2.208
cao_chong汉化?/SPAN>(自带masm32,ollyDBG).1.计算机最的储存单位为字?/SPAN>(byte),~写?/SPAN>B?/SPAN>
1B=8b(bit),1KB=1024B,1MB=1024KB,1GB=1024MB
2.每个CPU芯片都有许多脚Q这些管脚和ȝ相连?/SPAN>CPU有以下三UȝQ?/SPAN>(标志CPU的不同方面的性能)
1)地址ȝQ它的宽度决定了CPU的寻址能力?/SPAN>
2)数据ȝQ它的宽度决定了CPU与其他器件进行数据传送时的一ơ数据传送量?/SPAN>
3)控制ȝQ它的宽度决定了CPU对系l中其他器g的控制能力?/SPAN>
3.一?/SPAN>CPU的寻址能力?/SPAN>8KBQ那么它的地址ȝ的宽度ؓ13?/SPAN>
4.L有以下器件组?/SPAN>:CPU,存储?/SPAN>,外围芯片l?/SPAN>,扩展插槽(插有RAM内存条和各类接口?/SPAN>)?/SPAN>
5.CPU可以d的内存空间有以下几种存储器组成:
q三cȝ成一个逻辑存储?/SPAN>,也就是内存的地址I间?/SPAN>
1)随机存储器:用于存放?/SPAN>CPU使用的绝大部分程序和数据Q主随机存储器一般由两个位置上的RAMl成Q装在主板上?/SPAN>RAM和插在扩展插槽上?/SPAN>RAM(卛_存条)?/SPAN>
2)装有BIOS?/SPAN>ROMQ?/SPAN>BIOS是有L和各cL口卡(?/SPAN>:昑֍Q网卡等)厂商提供的Y件系l,可以通过它利用该讑֤q行最基本的输入输出。在L和某些接口卡上插有储存相?/SPAN>BIOS?/SPAN>ROM?/SPAN>
3)接口卡上?/SPAN>RAMQ某些接口卡需要对大批量输入,输出数据q行暂时存储Q在其上装有RAM。最典型的是昄卡上?/SPAN>RAMQ一般称为显存。当我们需要显C的内容写入昑֭Q就会出现在昄器上?/SPAN>
6.8086PC内存地址I间分配
00000Q?/SPAN>9FFFFd储器地址I间(RAM)
A0000Q?/SPAN>BFFFF昑֭地址I间
C0000Q?/SPAN>FFFFF各类ROM地址I间
二、寄存器(CPU工作原理)
1.CPU有运器、控制器、寄存器{器件构成。这些器仉内部ȝ相连?/SPAN>
2.8086CPU?/SPAN>14?/SPAN>(16位的寄存?/SPAN>):
普通寄存器:AX,BX,CX,DX
D寄存器:CS,SS,DS,ES
指针寄存?/SPAN>:IP
其他寄存?/SPAN>:SI,DI,SP,BP,PSW.
其中AX,BX,CX,DX分ؓ*H?/SPAN>*L(*分别?/SPAN>A,B,C,D).AX=1234HQ则AH:12H,AL:34H
3.al作ؓ一个独立的寄存器来用时Q和ah没关p?/SPAN>.al单独q算时生的q位不会保存?/SPAN>ah?/SPAN>.
4.因ؓ8086CPU?/SPAN>16位结构的Q即一ơ性处理、传输、暂时存储的信息的最大长度ؓ16?/SPAN>,但地址ȝ?/SPAN>20位,所有就用两?/SPAN>16位的地址合成一?/SPAN>20位的物理地址.
公式:物理地址=D地址(SA)*10H+偏移地址(EA).
D地址?/SPAN>0001H,dI间?/SPAN>00010H---1000FH.(?/SPAN>FFFFH)
5.一个段的最大长度ؓ64K?/SPAN>
6. 8086CPU工作q程
1)?/SPAN>CS:IP指向的内存单元读取指令,d得指令进入指令缓冲器?/SPAN>
2)IP=IP+所d指o的长度,从而指向下一条指令?/SPAN>
3)执行指o。{到步?/SPAN>1,重复q个q程?/SPAN>