汇编网首页登录博客注册
sissim的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
好友圈
友情链接

[2009-10-28 20:22] 实验4

(1)(2)
C:\masm>debug ex4-1.exe
-u0 13
0B6D:0000 B82000        MOV     AX,0020
0B6D:0003 8ED8          MOV     DS,AX
0B6D:0005 BB0000        MOV     BX,0000
0B6D:0008 B94000        MOV     CX,0040
0B6D:000B 881F          MOV     [BX],BL
0B6D:000D 43            INC     BX
0B6D:000E E2FB          LOOP    000B
0B6D:0010 B8004C        MOV     AX,4C00
0B6D:0013 CD21          INT     21
-r
AX=0000  BX=0000  CX=0015  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B5D  ES=0B5D  SS=0B6D  CS=0B6D  IP=0000   NV UP EI PL NZ NA PO NC
0B6D:0000 B82000        MOV     AX,0020
-t

AX=0020  BX=0000  CX=0015  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B5D  ES=0B5D  SS=0B6D  CS=0B6D  IP=0003   NV UP EI PL NZ NA PO NC
0B6D:0003 8ED8          MOV     DS,AX
-t

AX=0020  BX=0000  CX=0015  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0020  ES=0B5D  SS=0B6D  CS=0B6D  IP=0005   NV UP EI PL NZ NA PO NC
0B6D:0005 BB0000        MOV     BX,0000
-t

AX=0020  BX=0000  CX=0015  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0020  ES=0B5D  SS=0B6D  CS=0B6D  IP=0008   NV UP EI PL NZ NA PO NC
0B6D:0008 B94000        MOV     CX,0040
-t

AX=0020  BX=0000  CX=0040  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0020  ES=0B5D  SS=0B6D  CS=0B6D  IP=000B   NV UP EI PL NZ NA PO NC
0B6D:000B 881F          MOV     [BX],BL                            DS:0000=00
-t

AX=0020  BX=0000  CX=0040  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0020  ES=0B5D  SS=0B6D  CS=0B6D  IP=000D   NV UP EI PL NZ NA PO NC
0B6D:000D 43            INC     BX
-t

AX=0020  BX=0001  CX=0040  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0020  ES=0B5D  SS=0B6D  CS=0B6D  IP=000E   NV UP EI PL NZ NA PO NC
0B6D:000E E2FB          LOOP    000B
-t

AX=0020  BX=0001  CX=003F  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0020  ES=0B5D  SS=0B6D  CS=0B6D  IP=000B   NV UP EI PL NZ NA PO NC
0B6D:000B 881F          MOV     [BX],BL                            DS:0001=01
-t

AX=0020  BX=0001  CX=003F  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0020  ES=0B5D  SS=0B6D  CS=0B6D  IP=000D   NV UP EI PL NZ NA PO NC
0B6D:000D 43            INC     BX
-t

AX=0020  BX=0002  CX=003F  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0020  ES=0B5D  SS=0B6D  CS=0B6D  IP=000E   NV UP EI PL NZ NA PO NC
0B6D:000E E2FB          LOOP    000B
-p

AX=0020  BX=0040  CX=0000  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0020  ES=0B5D  SS=0B6D  CS=0B6D  IP=0010   NV UP EI PL NZ AC PO NC
0B6D:0010 B8004C        MOV     AX,4C00
-d ds:0 3f
0020:0000  00 01 02 03 04 05 06 07-08 09 0A 0B 0C 0D 0E 0F   ................
0020:0010  10 11 12 13 14 15 16 17-18 19 1A 1B 1C 1D 1E 1F   ................
0020:0020  20 21 22 23 24 25 26 27-28 29 2A 2B 2C 2D 2E 2F    !"#$%&'()*+,-./
0020:0030  30 31 32 33 34 35 36 37-38 39 3A 3B 3C 3D 3E 3F   0123456789:;<=>?

之前在用执行可执行文件的方法运行过一次,所以单步执行时,“mov [bx],bl”执行前,ds:0和ds:1就已经是所要求的数据了。

(3)这个题目,从前天晚上就开始考虑,这两天事情比较多,一直没有动手调试。第二个空让我百思不得其解。最后想到教材里提到“debug加载一个程序后,cx中存放的是这个程序的长度”,于是把第二个空填cx试试看。当然,这不符合题目要求。题目要求是“mov ax,4c00h”之前的指令复制过去,要是我这样处理,就会把整个程序复制过去。最后两条指令长度为5个字节,但是“mov cx,cx-5”这样的指令存在语法错误。姑且用“mov cx,cx”试试吧。

        assume  cs:code
code    segment
        mov     ax,code
        mov     ds,ax
        mov     ax,0020h
        mov     es,ax
        mov     bx,0
        mov     cx,cx
s:      mov     al,[bx]
        mov     es:[bx],al
        inc     bx
        loop    s
        mov     ax,4c00h
        int     21h
code    ends
        end

调试结果如下:
C:\masm>debug 4-2.exe
-r
AX=0000  BX=0000  CX=001C  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B5C  ES=0B5C  SS=0B6C  CS=0B6C  IP=0000   NV UP EI PL NZ NA PO NC
0B6C:0000 B86C0B        MOV     AX,0B6C
-u0 1a
0B6C:0000 B86C0B        MOV     AX,0B6C
0B6C:0003 8ED8          MOV     DS,AX
0B6C:0005 B82000        MOV     AX,0020
0B6C:0008 8EC0          MOV     ES,AX
0B6C:000A BB0000        MOV     BX,0000
0B6C:000D 8BC9          MOV     CX,CX
0B6C:000F 8A07          MOV     AL,[BX]
0B6C:0011 26            ES:
0B6C:0012 8807          MOV     [BX],AL
0B6C:0014 43            INC     BX
0B6C:0015 E2F8          LOOP    000F
0B6C:0017 B8004C        MOV     AX,4C00
0B6C:001A CD21          INT     21
-d 20:0
0020:0000  00 01 02 03 04 05 06 07-08 09 0A 0B 0C 0D 0E 0F   ................
0020:0010  10 11 12 13 14 15 16 17-18 19 1A 1B 1C 1D 1E 1F   ................
0020:0020  20 21 22 23 24 25 26 27-28 29 2A 2B 2C 2D 2E 2F    !"#$%&'()*+,-./
0020:0030  30 31 32 33 34 35 36 37-38 39 3A 3B 3C 3D 3E 3F   0123456789:;<=>?
0020:0040  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0020:0050  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0020:0060  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0020:0070  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
-g 17

AX=0021  BX=001C  CX=0000  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=0017   NV UP EI PL NZ NA PO NC
0B6C:0017 B8004C        MOV     AX,4C00
-d 20:0
0020:0000  B8 6C 0B 8E D8 B8 20 00-8E C0 BB 00 00 8B C9 8A   .l.... .........
0020:0010  07 26 88 07 43 E2 F8 CC-00 4C CD 21 1C 1D 1E 1F   .&..C....L.!....
0020:0020  20 21 22 23 24 25 26 27-28 29 2A 2B 2C 2D 2E 2F    !"#$%&'()*+,-./
0020:0030  30 31 32 33 34 35 36 37-38 39 3A 3B 3C 3D 3E 3F   0123456789:;<=>?
0020:0040  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0020:0050  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0020:0060  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0020:0070  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
-u 20:0
0020:0000 B86C0B        MOV     AX,0B6C
0020:0003 8ED8          MOV     DS,AX
0020:0005 B82000        MOV     AX,0020
0020:0008 8EC0          MOV     ES,AX
0020:000A BB0000        MOV     BX,0000
0020:000D 8BC9          MOV     CX,CX
0020:000F 8A07          MOV     AL,[BX]
0020:0011 26            ES:
0020:0012 8807          MOV     [BX],AL
0020:0014 43            INC     BX
0020:0015 E2F8          LOOP    000F
0020:0017 CC            INT     3
0020:0018 004CCD        ADD     [SI-33],CL
0020:001B 211C          AND     [SI],BX
0020:001D 1D1E1F        SBB     AX,1F1E

反汇编后发现,居然只有“mov ax,4c00h”之前的复制过来了!但是我的循环次数明明是1c——整个程序长度。为什么会这样?仔细观察,发现只是0020:0017单元的内容,本来应该是B8,但实际结果是CC。再用“g=0 17”执行一次,居然就退出debug了!重新加载,第一次执行,就跟上面结果一样,第二次执行,就直接退出debug。仔细分析,发现问题。因为程序中对cx赋值,是“mov cx,cx”,第一次执行后,cx已经为0,再次执行,执行到loop指令时,cx减1,变成了FFFFH,循环次数错了。为什么会退出,我没有细想,先放一放。
修改cx,单步执行,几行指令后,用p命令执行loop。结果如下:


-rcx
CX 0000
:1c
-rip
IP 0017
:0
-t


AX=0B6C  BX=001C  CX=001C  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=0003   NV UP EI PL NZ NA PO NC
0B6C:0003 8ED8          MOV     DS,AX
-t

AX=0B6C  BX=001C  CX=001C  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=0005   NV UP EI PL NZ NA PO NC
0B6C:0005 B82000        MOV     AX,0020
-t

AX=0020  BX=001C  CX=001C  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=0008   NV UP EI PL NZ NA PO NC
0B6C:0008 8EC0          MOV     ES,AX
-t

AX=0020  BX=001C  CX=001C  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=000A   NV UP EI PL NZ NA PO NC
0B6C:000A BB0000        MOV     BX,0000
-t

AX=0020  BX=0000  CX=001C  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=000D   NV UP EI PL NZ NA PO NC
0B6C:000D 8BC9          MOV     CX,CX
-t

AX=0020  BX=0000  CX=001C  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=000F   NV UP EI PL NZ NA PO NC
0B6C:000F 8A07          MOV     AL,[BX]                            DS:0000=B8
-t

AX=00B8  BX=0000  CX=001C  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=0011   NV UP EI PL NZ NA PO NC
0B6C:0011 26            ES:
0B6C:0012 8807          MOV     [BX],AL                            ES:0000=B8
-t

AX=00B8  BX=0000  CX=001C  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=0014   NV UP EI PL NZ NA PO NC
0B6C:0014 43            INC     BX
-t

AX=00B8  BX=0001  CX=001C  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=0015   NV UP EI PL NZ NA PO NC
0B6C:0015 E2F8          LOOP    000F
-t

AX=00B8  BX=0001  CX=001B  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=000F   NV UP EI PL NZ NA PO NC
0B6C:000F 8A07          MOV     AL,[BX]                            DS:0001=6C
-t

AX=006C  BX=0001  CX=001B  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=0011   NV UP EI PL NZ NA PO NC
0B6C:0011 26            ES:
0B6C:0012 8807          MOV     [BX],AL                            ES:0001=6C
-t

AX=006C  BX=0001  CX=001B  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=0014   NV UP EI PL NZ NA PO NC
0B6C:0014 43            INC     BX
-t

AX=006C  BX=0002  CX=001B  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=0015   NV UP EI PL NZ NA PO NC
0B6C:0015 E2F8          LOOP    000F
-p

AX=0021  BX=001C  CX=0000  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=0017   NV UP EI PL NZ NA PO NC
0B6C:0017 B8004C        MOV     AX,4C00
-d 20:0 1f
0020:0000  B8 6C 0B 8E D8 B8 20 00-8E C0 BB 00 00 8B C9 8A   .l.... .........
0020:0010  07 26 88 07 43 E2 F8 CC-00 4C CD 21 1C 1D 1E 1F   .&..C....L.!....

查看内存的0020:0017单元,发现还是cc。只好用笨办法,用单步执行,看看到底是哪一步出了问题。

-rcx
CX 0000
:1c
-rip
IP 0017
:0
-t

AX=0B6C  BX=001C  CX=001C  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=0003   NV UP EI PL NZ NA PO NC
0B6C:0003 8ED8          MOV     DS,AX
-t

AX=0B6C  BX=001C  CX=001C  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=0005   NV UP EI PL NZ NA PO NC
0B6C:0005 B82000        MOV     AX,0020
-t

AX=0020  BX=001C  CX=001C  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=0008   NV UP EI PL NZ NA PO NC
0B6C:0008 8EC0          MOV     ES,AX

………………………………………………

-t

AX=004C  BX=001A  CX=0003  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=0015   NV UP EI PL NZ NA PO NC
0B6C:0015 E2F8          LOOP    000F
-t

AX=004C  BX=001A  CX=0002  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=000F   NV UP EI PL NZ NA PO NC
0B6C:000F 8A07          MOV     AL,[BX]                            DS:001A=CD
-t

AX=00CD  BX=001A  CX=0002  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=0011   NV UP EI PL NZ NA PO NC
0B6C:0011 26            ES:
0B6C:0012 8807          MOV     [BX],AL                            ES:001A=CD
-t

AX=00CD  BX=001A  CX=0002  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=0014   NV UP EI PL NZ NA PO NC
0B6C:0014 43            INC     BX
-t

AX=00CD  BX=001B  CX=0002  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=0015   NV UP EI PL NZ NA PE NC
0B6C:0015 E2F8          LOOP    000F
-t

AX=00CD  BX=001B  CX=0001  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=000F   NV UP EI PL NZ NA PE NC
0B6C:000F 8A07          MOV     AL,[BX]                            DS:001B=21
-t

AX=0021  BX=001B  CX=0001  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=0011   NV UP EI PL NZ NA PE NC
0B6C:0011 26            ES:
0B6C:0012 8807          MOV     [BX],AL                            ES:001B=21
-t

AX=0021  BX=001B  CX=0001  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=0014   NV UP EI PL NZ NA PE NC
0B6C:0014 43            INC     BX
-t

AX=0021  BX=001C  CX=0001  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=0015   NV UP EI PL NZ NA PO NC
0B6C:0015 E2F8          LOOP    000F
-t

AX=0021  BX=001C  CX=0000  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=0017   NV UP EI PL NZ NA PO NC
0B6C:0017 B8004C        MOV     AX,4C00
-t

AX=4C00  BX=001C  CX=0000  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6C  ES=0020  SS=0B6C  CS=0B6C  IP=001A   NV UP EI PL NZ NA PO NC
0B6C:001A CD21          INT     21
-d 20:0 1f
0020:0000  B8 6C 0B 8E D8 B8 20 00-8E C0 BB 00 00 8B C9 8A   .l.... .........
0020:0010  07 26 88 07 43 E2 F8 B8-00 4C CD 21 1C 1D 1E 1F   .&..C....L.!....

全程用t命令执行下来,我直接哭了。0020:0017,居然是B8!
难道用t命令和g命令执行,对结果也有影响吗???

另外,这个题,到底应该怎么做呀?
真是要崩溃了,55555

PS:刚才做检测题,居然碰到了类似的题目:

对于如下程序
 assume cs:code
 code segment
  start:mov ax,code
  mov ds,ax
  mov ax,0020h
  mov es,ax
  mov bx,0
  s:mov al,[bx]
  mov es:[bx],al
  inc bx
  loop s
  mov ax,4c00h
  int 21h
  code ends
 end
 下列说法正确的是______。
1、 指令mov ax,code改为mov ax,start对程序要实现的功能没有任何影响。
2、 程序不能通过编译,因为在loop指令之前,没有对寄存器cx进行设定。
3、 程序实现的功能是将程序的所有指令复制到内存中以0:200h为起始地址的一段内存空间中。
4、 程序实现的功能是用内存中以0:200h为起始地址的一段内存空间中的数据将程序的所有指令覆盖。

答案是3。
他直接就没有设置cx。
评论次数(5)  |  浏览次数(1567)  |  类型(汇编作业) |  收藏此文  | 

[  游客   发表于  2011-10-11 00:50  ]

能不能给你QQ我呢?我QQ是453677447,我对这道题的见解和你一样,想和你讨论一下

[  游客   发表于  2011-11-21 11:00  ]

第一个填cs
第二个非常无语,debug中可以mov cx,cx-5,源代码中不能编译,只能手动减了,填17h

[  bypeng   发表于  2011-11-21 14:43  ]

同样迷惑

[  tomato   发表于  2011-11-21 19:17  ]

先随便填个值。然后,编译查看后再填。

[  游客   发表于  2013-06-28 11:01  ]

老师好啊~

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码