首页 > ASM, 原创 > 王爽汇编语言(第2版)检测点3.1

王爽汇编语言(第2版)检测点3.1

(1) 在Debug中,用户”d 0:0 1F” 查看内存,结果如下。

0000:0000    70 80 F0 30 EF 60 30 E2-00 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    AX=0001H
mov ds,ax    DS=0001H    (0001:0000)指向的内存地址与(0000:0010)相同
mov ax,[0000]     AX=2662H
mov bx,[0001]     BX=E626H
mov ax,bx              AX=E626H
mov ax,[0000]    AX=2662H
mov bx,[0002]    BX=D6E6H
add ax,bx               AX=FD48H
add ax,[0004]      AX=2C14H
mov ax,0                AX=0000H
mov al,[0002]     AX=00E6H
mov bx,0               BX=0000H
mov bl,[000c]     BX=0026H
add al,bl                  BX=000CH

提示,注意DS的设置。

(2) 内存中的情况如图3.6所示。

各寄存器的初始值:CS=2000H, IP=0, DS=1000H, AX=0, BX=0;

① 写出CPU执行的指令序列(用汇编指令写出)。
② 写出CPU执行每条指令后,CS、IP和相关寄存器中的数值。
③ 再次体会:数据和程序有区别吗?如何确定内存中的信息哪些是数据,哪些是程序?

asm_3_6

图 3.6 内存情况示意图

 1. mov ax,6622H
CS=2000H, IP=0003, DS=1000H, AX=6622H, BX=0000H

2. jmp 0FF0:0100
CS=0FF0H, IP=0100H, DS=1000H, AX=6622H, BX=0000H
指令指向内存地址为 0FF0H x 10H + 0100H = 10000H

3. mov ax,2000H
CS=0FF0H, IP=0103H, DS=1000H, AX=2000H, BX=0000H

4. mov ds,ax
CS=0FF0H, IP=0105H, DS=2000H, AX=2000H, BX=0000H
数据指向内存地址为 2000H x 10H + 0000H = 20000H

5. mov ax,[0008]
CS=0FF0H, IP=0108H, DS=2000H, AX=C389H, BX=0000H

6. mov ax,[0002]
CS=0FF0H, IP=010BH, DS=2000H, AX=EA66H, BX=0000H

数据在内存中都是以二进制形式存放,CPU把CS:IP指向的内存地址当做指令执行,DS:0000指向的内存地址当做数据来调用。

分类: ASM, 原创 标签:
  1. 匿名
    2010年1月24日10:33 | #1

    请教,为什么 (0001:0000)指向的内存地址与(0000:0010)相同呢??非常疑惑,谢谢。

  2. 匿名
    2010年3月19日00:36 | #2

    @匿名
    (0001:0000)=0001H*10H+0000H=00010H
    (0000:0010)=0000H*10H+0010H=00010H
    (0001:0000)=(0000:0010)