奥普瓯江 发表于 2018-5-28 23:30:36

检测点3.1

本帖最后由 奥普瓯江 于 2018-5-29 00:18 编辑

(1)在Debug中,用“d 0000:0000 1f”查看内存,结果如下
0000:0000 70 80 F0 30EF60 30E2-00   8080 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, AX = 2662
mov bx, BX = E626
mov ax, bx         AX = E626
mov bx, AX = 2662
mov bx, BX = D6E6
addax, bx         AX = FD48
addax, AX = 2C14
mov ax, 0         AX = 0000
mov ax, AX = 00E6
mov bx, 0         BX = 0000
mov bl, BX = 0026
addal, 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,    把数据段地址2000H内存单元地址0008中的数据C389付给ax每个ax接受一个字两个字节的数据如果指定的是89那调入到ax中就缺少一个字节所以自动加上下一个地址段中的字节C3。
mov ax,    把数据段地址2000H内存单元地址0002中的数据付给ax每个ax接受一个字两个字节的数据道理同上。

mov ax, 6622H    AX:6622BX:0000 CS:2000 IP:0003DS:1000
jmp 0ff0:0100      AX:6622BX:0000 CS:0ff0IP:0100DS:1000
mov ax, 2000H    AX:2000BX:0000 CS:0ff0IP:0103   DS:1000
mov ds, ax         AX:2000   BX:0000 CS:0ff0IP:0105DS:2000
mov ax,     AX:C389BX:0000 CS:0ff0IP:0108DS:2000
mov ax,     AX:EA66BX:0000 CS:0ff0IP:010B DS:2000

数据和程序在内存中储存时是没有区别的,当被不同的寄存器调用才会产生区别(这句话我自己也没有自信是不是对,还请各位大神耐心指导)

Growlanser 发表于 2018-6-3 18:37:31

楼主你好,请问jmp 0ff0:0100   就跳转到了10000H

dys376820508 发表于 2018-6-3 20:08:44

Growlanser 发表于 2018-6-3 18:37
楼主你好,请问jmp 0ff0:0100   就跳转到了10000H

ff00h + 100h = 10000h

奥普瓯江 发表于 2018-6-7 17:41:43

Growlanser 发表于 2018-6-3 18:37
楼主你好,请问jmp 0ff0:0100   就跳转到了10000H

jum跳转应该是0ff0*16+0100 = 10000

奥普瓯江 发表于 2018-6-7 17:42:16

dys376820508 发表于 2018-6-3 20:08
ff00h + 100h = 10000h

三楼这个应该是错的吧

dys376820508 发表于 2018-6-8 21:13:47

奥普瓯江 发表于 2018-6-7 17:42
三楼这个应该是错的吧

和四楼一个意思

Growlanser 发表于 2018-6-10 21:45:49

dys376820508 发表于 2018-6-3 20:08
ff00h + 100h = 10000h

后面看了视频,回头看秒懂,学习啦

z1446773686 发表于 2018-6-27 09:21:58

虽然楼主写的是对的但,答案看的好乱,
而且ds,为0001时CS不也应该0001怎么ip变了,CS没变,还有,mov bx,0,mov bl,,之后bx不应该等于0000怎么等于0026了,最后的ax怎么又等于000c了

赛赛要加油 发表于 2018-8-13 15:45:07

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

zhengqiyao.ym 发表于 2019-6-25 17:15:39

mov ax, 1
mov ds, ax
mov ax,    AX = 2662
mov bx,    BX = E626
mov ax, bx         AX = E626
mov bx,    AX = 2662
mov bx,    BX = D6E6
addax, bx         AX = FD48
addax,    AX = 2C14
mov ax, 0         AX = 0000
mov ax,    AX = 00E6
mov bx, 0          BX = 0000----楼主我想知道这个bx=0000
mov bl,    BX = 0026------执行mov bl,之后    BX怎么变成0026了 ????   求解!

奥普瓯江 发表于 2019-7-9 12:56:17

zhengqiyao.ym 发表于 2019-6-25 17:15
mov ax, 1
mov ds, ax
mov ax,    AX = 2662


(1)在Debug中,用“d 0000:0000 1f”查看内存,结果如下
0000:0000 70 80 F0 30EF60 30E2-00   8080 12 66 20 22 60
0000:0010 62 26 E6 D6 CC 2E 3C 3B-AB BA 00 00 26 06 66 88

mov ax, 1
mov ds, ax
段地址等于一了
这个是求他的地址0001:000C中储存的数据
实际内存地址是0001C,在内存中0001C中所储存的数据是26(前面bx以归零所以bh高位中没有数据)

WUXIE 发表于 2019-10-21 11:07:43

楼主这个很好,会的人秒懂,不懂的人肯定会说乱

奥普瓯江 发表于 2019-10-21 17:17:22

WUXIE 发表于 2019-10-21 11:07
楼主这个很好,会的人秒懂,不懂的人肯定会说乱

谢谢 互相学习
页: [1]
查看完整版本: 检测点3.1