《汇编语言第三版》王爽著 ------读书笔记
检测点 3.1
答:
1)
DS=1,
[0] == 0001:0000 == 0000:0010
[1] == 0001:0001 == 0000:0011
[2] == 0001:0002 == 0000:0012
[4] == 0001:0004 == 0000:0014
[c] == 0001:000c ==0000:001C
执行完后:
AX = 26 62H
BX = E6 26H
AX = E6 26H
AX = 26 62H
BX = D6 E6H
AX = FD 48H
AX = 2C 14H
AX = 00 00H
AX = 00 E6H
BX = 00 00H
BX = 00 26H
AX = 00 1CH
2)
CS:IP 2000:0000
① mov ax, 6622H
jmp 0ff0:0100 ; jmp 10000:0000
mov ax, 2000H
mov ds,ax
mov ax,[0008]
mov ax,[0002]
② mov ax, 6622H CS:IP 2000:0003 ax = 6622H
jmp 0ff0:0100 CS:IP 2000:0008 -->10000:0000 (IP的值改变两次)
mov ax, 2000H CS:IP 1000:0003 ax = 2000H
mov ds,ax CS:IP 1000:0005 ds = 2000H
mov ax,[0008] CS:IP 1000:0008 ax = C3 89H
mov ax,[0002] CS:IP 1000:000B ax = EA 66H
③
数据和程序在内存中没有区别,均为以二进制形式存放的一组数据,
被CS:IP所指向的为程序指令,未被CS:IP指向的则为数据
注:jmp指令执行后,IP值改变了两次,
调试中,Debug T命令单步执行时,修改寄存器SS的指令不会显示执行,其内部已经执行,下一条指令紧跟着被执行
当寄存器的低位和低位之间进行运算时,若超出存储的范围,进位后直接丢弃,不会存储到高位 如:ADD AL,BL
检测点 3.2(栈:先进后出)
1)1000H~1000FH区间作数据段,20000H~2000F区间作栈,数据段的数据【0】...[E]
依次压入栈即逆序复制
mov ax,2000H
mov ss,ax
mov sp,10H
2)1000H~1000FH区间作栈,20000H~2000F区间作数据段,栈中的数据依次弹出
即逆序复制
mov ax,1000H
mov ss, ax
mov sp, 10H