3.3 字的传送

8086CPU是16位结构,由16根数据总线,所以可以一次传送16位数据(1个字)。

只要在mov指令中给出16位的寄存器就可以进行16位数据的传送了。

 

mov bx,1000H
mov ds,bx
mov ax,[0]     ;1000:0处的字型数据送入ax
mov [0],cx     ;cx中的16位数据送到1000:0处

 

问题3.3

内存中的情况如下图所示,写出下面的指令执行后寄存器ax,bx,cx中的值

分析

使用debug程序模拟上面的代码

1) 布置内存现场

2) 书写汇编

可以观察到此时CS:IP已经指向了我们书写的指令mov ax,1000

3)步进执行

<1> mov ax,1000   => ax = 1000

<2> mov ds,ax   => ds = 1000

<3> mov ax,[0]   => 取出“1000*16+0 = 10000H”物理地址的内存中保存的字(1123H,16位CPU位2字节),赋值给ax,此时ax = 1123 

<4> mov bx,[2]   => [2]代表的物理地址是"1000*16+2 = 10002H",对应内存中的字为6622,此时bx = 6622

<5> mov cx,[1]   => [1]代表的物理地址是"1000*16+1 = 10001H",对应内存中的字为2211,此时cx = 2211

<6> add bx,[1]   => [1]代表的物理地址是"1000*16+1 = 10001H",对应内存中的字为2211,此时bx = 6622+2211=8833H

<7> add cx,[2]   => [2]代表的物理地址是"1000*16+2 = 10002H",对应内存中的字为6622,此时cx = 2211+6622=8833H

故答案为:ax=1123,bx=8833,cx=8833

 

问题3.4

内存中的情况如下图所示,写出下面的指令执行后内存中的值

此题目考的是内存内容复制到寄存器和寄存器内容复制到内存中

mov ax,1000H
mov ds,ax
mov ax,11316
mov [0],ax
mov bx,[0]
sub bx,[2]
mov [2],bx

分析

1) 布置内存现场

2)书写汇编代码

使用a命令跳转到CS:IP所指向的物理地址,这样我们便不必修改CS:IP(CPU会把CS:IP执行的二进制数据当做指令执行)

 

3) 推测结果

mov ax,1000H   => ax = 1000H
mov ds,ax   => ds = 1000H
mov ax,11316  => ax = 2c34H
mov [0],ax   => 10000字节保存34,10001字节保存2c
mov bx,[0]   => bx = 2c34
sub bx,[2]   => [2]代表的物理地址是"1000*16+2 = 10002H",对应内存中的字为1122H,此时bx = bx - 1122H = 1b12H
mov [2],bx   => 10002字节保存12,10003字节保存1b

4) debug步进验证

 

结果与分析一致

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值