寄存器 及 寻址
数据处理的两个基本问题:
1.数据在哪里
2.数据有多长
reg的集合:
ax,bx,cx,dx, al,bl,cl,dl, ah,bh,ch,dh, si,di, sp, bp
sreg的集合:
cs,ds,ss,es
在[...]中,这4个寄存器可以单个出现,或只能以4种组合出现:
bx+si, bx+di, bp+si,bp+di
汇编语言中数据位置的表达:
1.立即数(idata)
e.g.:
mov ax,1 ;(10进制 )
add bx,2000h ;(16..)
add bx,00010000b(2进制)
mov al,'a' (ascii code)
2.寄存器
mov ax,bx
push bx
mov ds:[0],bx
3.段地址(SA)和偏移地址(EA)
mov ax,[0]
mov ax,[di]
mov ax,[bx+8]
等指令,段地址默认在ds中
mov ax,[bp]
mov ax,[bp+8]
mov ax,[bp+si+8]
等指令,段地址默认在ss中。
8086 cpu的指令,可以处理两种尺寸的数据,byte和word,所以在机器指令中,要指明是字操作还是字节操作。
mov ax,1
mov bx,ds:[0]
...word...
mov al
mov al,bl
...byte...
没有寄存器名存在的情况下,用操作符X ptr指明内存单元的长度,X在汇编批令中可以为 word 或 byte.
mov word ptr ds:[0],1
inc word ptr [bx]
inc word ptr ds:[0]
add word ptr [bx],2
mov byte ptr ds:[0] , 1