张狂的暑假学习之 汇编入门学习笔记 (二)
参阅:《汇编语言》 王爽 第三章
一、寄存器(内存拜访)
1.DS和[address]
DS 数据段寄存器,用来寄存数据段地址
[address] 用来表明数据段的偏移地址
相同跟CS相同,不可以经过 mov ds, 1000 给ds赋值
要经过通用寄存器ax等。
例如:
mov ax, 1000
mov ds, ax
mov al, [0]
把1000:0的内容存进al
mov bx, 1000
mov ds, bx
mov [0], al
把al写进1000:0中
由于ax、bx、cx是16为的,内存单元是8为的,所以 mov ax, [0]会一次交给ax [1]跟[0]中的内容
例如:
假如内存状况为
10000H 11
10001H 22
10002H 33
10003H 44
……..
——————————–
mov ax, 1000
mov ds, ax
mov ax [0]
mov bx [2]
mov cx [1]
这上面运转后 ax=2211H 、bx=4433H、cx=3322H
mov ax,1000
mov ds, ax
mov ax, 1234
mov [0], ax
这上面运转后内存内容变为
10000H 34
10001H 12
………
2. CPU 栈
相关寄存器:
ss: 记载栈的段地址
sp:记载栈的段地址的偏移地址
相关指令:
push 入栈 如 push ax 表明将寄存器ax的内容写入栈
pop 出栈 如 pop ax 表明从栈顶取出数据送入ax
初始时,sp指向栈低的下一个单元的地址,每次push,sp减2,pop,sp加2
例如:
将10000H~1000FH这段内存作为栈来用
为了10000H~1000FH这段内存作为栈来用,要设置 ss=1000 sp=0010(栈底的下一个单元的地址)
假如内存内容如下:
—————————
10000H
……….
1000CH
1000DH
1000EH
1000FH
10010H <------- sp
—————————
mov ax,0123
push ax
后内存内容如下:
—————————
10000H
……….
1000CH
1000DH
1000EH
1000FH 23 <------- sp
10010H 01
—————————
pop bx
后bx=0123H内存内容如下:
—————————
10000H
……….
1000CH
1000DH
1000EH
1000FH
10010H <------- sp
—————————
3.CPU 栈顶越界
8086CPU 确保咱们对栈的操作不会越界。也就说,8086 CPU 只知道栈顶在何处,不知道栈底和栈空间的巨细。