汇编基础——玩转寄存器

任务1-运行程序,观察内存

汇编基础——玩转寄存器

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

(1) CPU执行的指令序列:

①初始时,CS:IP为2000H:0,则执行 mov ax,6622H;→ ②IP自增,执行 jmp 0ff0:0100;→③ 执行完跳转指令,跳转到10000H处,执行mov ax,2000H;→④ 顺序执行mov ds,ax;→⑤ mov ax,[0008];→⑥ mov ax,[0002];

(2) 写出CPU执行每条指令后,CS、IP和相关寄存器中的数值。

答:

  1. 执行的第1条指令是: mov ax,6622H   
      执行后相关寄存器中的值为:
    DS: 1000H   CS: 2000H    IP: 0003H   AX: 6622H    BX: 0000H   
  2. 执行的第2条指令是: jmp 0ff0:0100     
      执行后相关寄存器中的值为:
    DS: 1000H    CS: 0ff0H   IP: 0100H   AX: 6622H   BX: 0000H   
  3. 执行的第3条指令是: mov ax,2000H   
      执行后相关寄存器中的值为:
    DS: 1000H    CS: 0ff0H   IP: 0103H   AX: 2000H   BX: 0000H   
  4. 执行的第4条指令是: mov ds,ax  
      执行后相关寄存器中的值为:
    DS: 2000H    CS: 0ff0H   IP: 0105H   AX: 2000H   BX: 0000H   
  5. 执行的第5条指令是: mov ax,[0008]  
      执行后相关寄存器中的值为:
    DS: 2000H    CS: 0ff0H   IP: 0108H   AX: C189H   BX: 0000H   

执行的第6条指令是: mov ax,[0002]   
  执行后相关寄存器中的值为:
DS: 2000H    CS: 0ff0H   IP: 010BH   AX: EA66H   BX: 0000H

(可用debug运行验证)

任务2-理解栈机制

已知(SS)=3000H,(SP)=200H,(AX)=785AH,(BX)=1234H

2-1 在下面空白处写下结果(请在分析的过程中,在草稿纸上画出栈的结构来)

先执行

PUSH AX(解析:(SP)=(SP)-2,将ax的内容送入SS:SP指向的内存单元处,SS:SP此时指向新栈顶

PUSH BX(解析:(SP)=(SP)-2,将bx的内容送入SS:SP指向的内存单元处,SS:SP此时指向新栈顶

指令后,(SS)=  3000H (SP)=  01FCH  

存放12H的字节数据的物理地址是 301FDH  

再执行

POP AX

POP BX

此时(AX与BX交换数据)

  (AX)=  1234H  

  (BX)=  785AH

汇编基础——玩转寄存器

掌握好基础,才能稳步前行~