|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 奥普瓯江 于 2018-5-29 00:18 编辑
(1)在Debug中,用“d 0000:0000 1f”查看内存,结果如下
0000:0000 70 80 F0 30 EF 60 30 E2-00 80 80 12 66 20 22 60
0000:0010 62 26 E6 D6 CC 2E 3C 3B-AB BA 00 00 26 06 66 88
下面的程序执行前,AX=0,BX=0,写出每条汇编指令执行完后相关寄存器中的值。
mov ax, 1
mov ds, ax
mov ax, [0000] AX = 2662
mov bx, [0001] BX = E626
mov ax, bx AX = E626
mov bx, [0000] AX = 2662
mov bx, [0002] BX = D6E6
add ax, bx AX = FD48
add ax, [0004] AX = 2C14
mov ax, 0 AX = 0000
mov ax, [0002] AX = 00E6
mov bx, 0 BX = 0000
mov bl, [000C] BX = 0026
add al, bl AX = 000C
(2)内存中的情况如图3.6所示
各寄存器的初始值:CS = 2000H, IP = 0, DS = 1000H, AX = 0, BX = 0;
1 写出CPU执行的指令序列(用汇编指令写出)。
2 写出CPU 执行每条指令后,CS、IP和相关寄存器中的数值。
3 再次体会:数据和程序有区别吗?如何确定内存中的信息那些是数据,那些是程序?
mov ax, 6622H 把6622H付给ax寄存器
jmp 0ff0:0100 跳转到内存地址10000H 段地址是0ff0偏移地址0100
mov ax, 2000H 把2000H付给ax寄存器
mov ds, ax 把通用寄存器ax中的数据2000H付给ds寄存器
mov ax, [0008] 把数据段地址2000H内存单元地址0008中的数据C389付给ax每个ax接受一个字两个字节的数据如果指定的是89那调入到ax中就缺少一个字节所以自动加上下一个地址段中的字节C3。
mov ax, [0002] 把数据段地址2000H内存单元地址0002中的数据付给ax每个ax接受一个字两个字节的数据道理同上。
mov ax, 6622H AX:6622 BX:0000 CS:2000 IP:0003 DS:1000
jmp 0ff0:0100 AX:6622 BX:0000 CS:0ff0 IP:0100 DS:1000
mov ax, 2000H AX:2000 BX:0000 CS:0ff0 IP:0103 DS:1000
mov ds, ax AX:2000 BX:0000 CS:0ff0 IP:0105 DS:2000
mov ax, [0008] AX:C389 BX:0000 CS:0ff0 IP:0108 DS:2000
mov ax, [0002] AX:EA66 BX:0000 CS:0ff0 IP:010B DS:2000
数据和程序在内存中储存时是没有区别的,当被不同的寄存器调用才会产生区别(这句话我自己也没有自信是不是对,还请各位大神耐心指导)
|
|