汇编笔记(三)
2012/3/15 15-20
(1)mov的形式
mov 段寄存器,寄存器 ds,ax
mov 寄存器,数据 ax,2
mov 寄存器,寄存器 ax,bx
mov 寄存器,内存单元 ax,[0]
mov 内存单元,寄存器 [0],ax
mov 寄存器,段寄存器
(2)add和sub如mov一样
(3)将123b0h—123bah的内存定义为数据段,累加数据段的前三个单元的数据
代码:
mov ax,123bh
mov ds,ax
mov al,0 //al的初始化
add al,[0]
add al,[1]
add al,[2]
将123b0h—123bah的内存定义为数据段,累加数据段的前三个字型的数据
代码:
mov ax,123bh
mov ds,ax
mov ax,0(或者是mov ax,1000:0)
add ax,[0]
add ax,[2]
add ax,[4]
(4)栈
段寄存器ss 存放栈顶的段地址
寄存器sp 存放栈顶的偏移地址
任意时刻,ss:sp指向栈顶元素
PUSH ax
为SP=SP-2;
将ax送入栈顶ss:sp
POP ax
将ax送入栈顶ss:sp
为SP=SP+2;
把10000h—1000fh为初始栈的时候ss=1000h sp=000eh
当sp=0010h时栈为空
(5)栈溢出
会导致其他用途的数据,代码破坏
解决方法:在cpu中有记录上下限的寄存器,可以通过寄存器指定栈的空间的
范围,然后执行push时靠栈顶上限寄存器,pop时则靠栈顶下限寄存器
注意释放内存
(6)栈与内存
栈是内存的一部分,
push和pop操作和mov相似