老韭菜A 发表于 2019-8-11 09:37:02

汇编问题3.1小甲鱼的机器测试截图 自己做找不到答案,求过程

(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

这个是答案,问题是我自己做得不到这答案

jackz007 发表于 2019-8-11 22:46:56

本帖最后由 jackz007 于 2019-8-11 23:53 编辑

       1、这道题的设定情景有非常大的问题,首先,0000:0010~0000:001F 这段内存属于操作系统区域,是用来存放 DOS 操作系统中断向量表的,这段内存每台机器既不一样也不能修改,根本无法重现题目中所描述的情景;

       2、第 2 题要求分别从固定的内存地址 2000:0000 和 0FF0:0100 编写代码,并进行跟踪,除非这 2 段内存地址都是未使用的自由空间,否则,修改代码的操作会直接危害到操作系统安全,也可能会破坏 debug.exe 本身占用的内存空间,从而造成非常严重的问题,使 debug 无法运行,预期的任务就不能完成。
       比如,在我这里,debug.exe 启动时的,CS:IP 是 13E5:0100,在我输入 0FF0:0100 处汇编代码的过程中,debug.exe 竟然意外退出,原因显然是我的行为严重破坏了 debug.exe 的运行环境,才会有这样的结果。

       所以,这 2 道题的设置并不能确保每个人都能够 100% 完成。

老韭菜A 发表于 2019-8-12 11:04:32

主要我是一个小白,需要的是过程可以看看吗,感觉是自己过程哪里错了,可以截图吗

jackz007 发表于 2019-8-12 11:33:57

本帖最后由 jackz007 于 2019-8-12 12:28 编辑

    第1题:
-d 0001:0000 l10

0001:00008B 01 70 00 B9 06 10 02-40 07 10 02 FF 03 10 02   ..p.....@.......
-a
13F0:0100 xor ax,ax
13F0:0102 xor bx,bx
13F0:0104 mov ax,1
13F0:0107 mov ds,ax
13F0:0109 mov ax,
13F0:010C mov bx,
13F0:0110 mov ax,bx
13F0:0112 mov bx,
13F0:0116 mov bx,
13F0:011A add ax,bx
13F0:011C add ax,
13F0:0120 mov ax,0
13F0:0123 mov ax,
13F0:0126 mov ax,0
13F0:0129 mov ax,
13F0:012C mov bx,0
13F0:012F mov bl,
13F0:0133 add al,bl
13F0:0135

-u 100 134

13F0:0100 31C0          XOR        AX,AX          ; AX = 0000                           
13F0:0102 31DB          XOR        BX,BX          ; BX = 0000                  
13F0:0104 B80100      MOV        AX,0001      ; AX = 0001                  
13F0:0107 8ED8          MOV        DS,AX          ; DS = 0001                  
13F0:0109 A10000      MOV        AX,      ; AX = 018B                  
13F0:010C 8B1E0100      MOV        BX,      ; BX = 7001                  
13F0:0110 89D8          MOV        AX,BX          ; AX = 7001                           
13F0:0112 8B1E0000      MOV        BX,      ; BX = 018B                  
13F0:0116 8B1E0200      MOV        BX,      ; BX = 0070                  
13F0:011A 01D8          ADD        AX,BX          ; AX = 7071                           
13F0:011C 03060400      ADD        AX,      ; AX = 772A                  
13F0:0120 B80000      MOV        AX,0000      ; AX = 0000                  
13F0:0123 A10200      MOV        AX,      ; AX = 0070                  
13F0:0126 B80000      MOV        AX,0000      ; AX = 0000                           
13F0:0129 A10200      MOV        AX,      ; AX = 0070                  
13F0:012C BB0000      MOV        BX,0000      ; BX = 0000                  
13F0:012F 8A1E0C00      MOV        BL,      ; BL = FF                  
13F0:0133 00D8          ADD        AL,BL          ; AL = 6F                  
-q

jackz007 发表于 2019-8-12 12:08:38

本帖最后由 jackz007 于 2019-8-12 12:25 编辑

      第 2 题,debug 入口是 13F0:0100,首先在程序入口,构筑程序起始条件:DS = 1000,AX = 0,BX = 0
-a
13F0:0100 mov ax,1000
13F0:0103 mov ds,ax
13F0:0105 xor ax,ax
13F0:0107 xor bx,bx
13F0:0109 jmp 2000:0
13F0:010E

      然后,编写题目要求的目标代码
-a 2000:0
2000:0000 mov ax,6622
2000:0003 jmp 2ff0:0100
2000:0008

-a 2ff0:0100
2FF0:0100 mov ax,2000
2FF0:0103 mov ds,ax
2FF0:0105 mov ax,
2FF0:0108 mov ax,

      由于段地址 0FF0 目前属于已占用内存,为了安全起见,把原来预设的下一个代码段地址 0FF0 更改为 2FF0
      下面是目标数据 2000:0000 ~ 2000:0010 的实际内存数据
2000:0000B8 22 66 EA 00 01 F0 2F-00 00 00 00 00 00 00 00   ."f..../........
       最后得到:
-d 2000:0 l10
2000:0000B8 22 66 EA 00 01 F0 2F-00 00 00 00 00 00 00 00   ."f..../........

-u 100 10d
13F0:0100 B80010      MOV      AX,1000       ; AX = 1000
13F0:0103 8ED8          MOV      DS,AX         ; DS = 1000
13F0:0105 31C0          XOR      AX,AX         ; AX = 0000
13F0:0107 31DB          XOR      BX,BX         ; BX = 0000
13F0:0109 EA00000020    JMP      2000:0000   ;CS = 2000,IP = 0000

-u 2000:0 l7
2000:0000 B82266      MOV      AX,6622       ; AX = 6622
2000:0003 EA0001F02F    JMP      2FF0:0100   ; CS = 2FF0,IP = 0100

-u 2ff0:100 la
2FF0:0100 B80020      MOV      AX,2000       ; AX = 2000
2FF0:0103 8ED8          MOV      DS,AX         ; DS = 2000
2FF0:0105 A10800      MOV      AX,   ; AX = 0000
2FF0:0108 A10200      MOV      AX,   ;AX = EA66

老韭菜A 发表于 2019-8-12 17:49:36

可以发一个图片吗,我主要不确定过程

老韭菜A 发表于 2019-8-12 18:19:56

问题
1、XOR是什么命令
2、题目d查看的是d 0000:0000 1f你写的是d0001:0000 110
页: [1]
查看完整版本: 汇编问题3.1小甲鱼的机器测试截图 自己做找不到答案,求过程