鱼C论坛

 找回密码
 立即注册
查看: 568|回复: 8

[汇编作业] 检测点3.1

[复制链接]
最佳答案
1 
发表于 2018-5-28 23:30:36 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

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

数据和程序在内存中储存时是没有区别的,当被不同的寄存器调用才会产生区别(这句话我自己也没有自信是不是对,还请各位大神耐心指导)
最佳答案
0 
发表于 2018-6-3 18:37:31 | 显示全部楼层
楼主你好,请问jmp 0ff0:0100   就跳转到了10000H
最佳答案
0 
发表于 2018-6-3 20:08:44 | 显示全部楼层
Growlanser 发表于 2018-6-3 18:37
楼主你好,请问jmp 0ff0:0100   就跳转到了10000H

ff00h + 100h = 10000h
最佳答案
1 
 楼主| 发表于 2018-6-7 17:41:43 | 显示全部楼层
Growlanser 发表于 2018-6-3 18:37
楼主你好,请问jmp 0ff0:0100   就跳转到了10000H

jum跳转应该是0ff0*16+0100 = 10000
最佳答案
1 
 楼主| 发表于 2018-6-7 17:42:16 | 显示全部楼层

三楼这个应该是错的吧
最佳答案
0 
发表于 2018-6-8 21:13:47 | 显示全部楼层
奥普瓯江 发表于 2018-6-7 17:42
三楼这个应该是错的吧

和四楼一个意思
最佳答案
0 
发表于 2018-6-10 21:45:49 | 显示全部楼层

后面看了视频,回头看秒懂,学习啦
最佳答案
1 
发表于 2018-6-27 09:21:58 From FishC Mobile | 显示全部楼层
虽然楼主写的是对的但,答案看的好乱,
而且ds,为0001时CS不也应该0001怎么ip变了,CS没变,还有,mov bx,0,mov bl,[000c],之后bx不应该等于0000怎么等于0026了,最后的ax怎么又等于000c了
最佳答案
0 
发表于 5 天前 | 显示全部楼层
z1446773686 发表于 2018-6-27 09:21
虽然楼主写的是对的但,答案看的好乱,
而且ds,为0001时CS不也应该0001怎么ip变了,CS没变,还有,mov bx, ...

楼主写的是对的,cs:ip是汇编程序执行指向的地址,ds是内存的地址,所以ds为0001,即指向内存0001,而cs是汇编程序执行的地址,始终不变(除非跳转到别的汇编程序指向的地址,如本实验(2)),偏移地址将会指向下一个指令执行的偏移地址,所以ip会变。
另外,mov bx,0-----是bx=0000
         mov bl,【C】是将偏移地址000C里的内容给了bl,即bl=26;其中bl是bx字里的低字节,而bx的高字节bh没说改变,所以还是bh=00       因此bx-0026
         mov ax,0-----同理,ax=0000
         mov aL,【2】-----ax=00E6   {此处楼主打错了}
         add al,bl----------即al=al+bl=E6+26=0C      因此ax=000C

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号

GMT+8, 2018-8-18 01:11

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表