(1)使用debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器中内容的变化。
a命令以前用过,这次是用e命令写入的。
C:\DOCUME~1\ADMINI~1>debug
-e1000:0 b8 20 4e 05 16 14 bb 00 20 01 d8 89 c3 01 d8 b8
-e1000:10 1a 00 bb 26 00 00 d8 00 dc 00 c7 b4 00 00 d8 04
-e1000:20 9c
-d1000:0 20
1000:0000 B8 20 4E 05 16 14 BB 00-20 01 D8 89 C3 01 D8 B8 . N..... .......
1000:0010 1A 00 BB 26 00 00 D8 00-DC 00 C7 B4 00 00 D8 04 ...&............
1000:0020 9C .
-u1000:0 20
1000:0000 B8204E MOV AX,4E20
1000:0003 051614 ADD AX,1416
1000:0006 BB0020 MOV BX,2000
1000:0009 01D8 ADD AX,BX
1000:000B 89C3 MOV BX,AX
1000:000D 01D8 ADD AX,BX
1000:000F B81A00 MOV AX,001A
1000:0012 BB2600 MOV BX,0026
1000:0015 00D8 ADD AL,BL
1000:0017 00DC ADD AH,BL
1000:0019 00C7 ADD BH,AL
1000:001B B400 MOV AH,00
1000:001D 00D8 ADD AL,BL
1000:001F 049C ADD AL,9C
-rcs
CS 0B0A
:1000
-rip
IP 0100
:0000
-t
AX=4E20 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=1000 IP=0003 NV UP EI PL NZ NA PO NC
1000:0003 051614 ADD AX,1416
-t
AX=6236 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=1000 IP=0006 NV UP EI PL NZ NA PE NC
1000:0006 BB0020 MOV BX,2000
-t
AX=6236 BX=2000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=1000 IP=0009 NV UP EI PL NZ NA PE NC
1000:0009 01D8 ADD AX,BX
-t
AX=8236 BX=2000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=1000 IP=000B OV UP EI NG NZ NA PE NC
1000:000B 89C3 MOV BX,AX
-t
AX=8236 BX=8236 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=1000 IP=000D OV UP EI NG NZ NA PE NC
1000:000D 01D8 ADD AX,BX
-t
AX=046C BX=8236 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=1000 IP=000F OV UP EI PL NZ NA PE CY
1000:000F B81A00 MOV AX,001A
-t
AX=001A BX=8236 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=1000 IP=0012 OV UP EI PL NZ NA PE CY
1000:0012 BB2600 MOV BX,0026
-t
AX=001A BX=0026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=1000 IP=0015 OV UP EI PL NZ NA PE CY
1000:0015 00D8 ADD AL,BL
-t
AX=0040 BX=0026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=1000 IP=0017 NV UP EI PL NZ AC PO NC
1000:0017 00DC ADD AH,BL
-t
AX=2640 BX=0026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=1000 IP=0019 NV UP EI PL NZ NA PO NC
1000:0019 00C7 ADD BH,AL
-t
AX=2640 BX=4026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=1000 IP=001B NV UP EI PL NZ NA PO NC
1000:001B B400 MOV AH,00
-t
AX=0040 BX=4026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=1000 IP=001D NV UP EI PL NZ NA PO NC
1000:001D 00D8 ADD AL,BL
-t
AX=0066 BX=4026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=1000 IP=001F NV UP EI PL NZ NA PE NC
1000:001F 049C ADD AL,9C
-t
AX=0002 BX=4026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=1000 IP=0021 NV UP EI PL NZ AC PO CY
1000:0021 0000 ADD [BX+SI],AL DS:4026=5D
(2)将下面3条指令写入从2000:0开始的内存单元中,利用这三条指令计算2的8次方。
mov ax,1
add ax,ax
jmp 2000:3
分析,执行一次add ax,ax,ax=2=2^1,再执行一次,ax=2*2=2^2,第三次执行,ax=2*(2*2)=2^3,……,第八次执行之后,ax中即为2^8。
C:\DOCUME~1\ADMINI~1>debug
-a2000:0
2000:0000 mov ax,1
2000:0003 add ax,ax
2000:0005 jmp 2000:0003
2000:0007
-rcs
CS 0B0A
:2000
-rip
IP 0100
:0
-t
AX=0001 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=2000 IP=0003 NV UP EI PL NZ NA PO NC
2000:0003 01C0 ADD AX,AX
-t
AX=0002 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=2000 IP=0005 NV UP EI PL NZ NA PO NC
2000:0005 EBFC JMP 0003
-t
AX=0002 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=2000 IP=0003 NV UP EI PL NZ NA PO NC
2000:0003 01C0 ADD AX,AX
-t
AX=0004 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=2000 IP=0005 NV UP EI PL NZ NA PO NC
2000:0005 EBFC JMP 0003
-t
AX=0004 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=2000 IP=0003 NV UP EI PL NZ NA PO NC
2000:0003 01C0 ADD AX,AX
-t
AX=0008 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=2000 IP=0005 NV UP EI PL NZ NA PO NC
2000:0005 EBFC JMP 0003
-t
AX=0008 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=2000 IP=0003 NV UP EI PL NZ NA PO NC
2000:0003 01C0 ADD AX,AX
-t
AX=0010 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=2000 IP=0005 NV UP EI PL NZ AC PO NC
2000:0005 EBFC JMP 0003
-t
AX=0010 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=2000 IP=0003 NV UP EI PL NZ AC PO NC
2000:0003 01C0 ADD AX,AX
-t
AX=0020 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=2000 IP=0005 NV UP EI PL NZ NA PO NC
2000:0005 EBFC JMP 0003
-t
AX=0020 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=2000 IP=0003 NV UP EI PL NZ NA PO NC
2000:0003 01C0 ADD AX,AX
-t
AX=0040 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=2000 IP=0005 NV UP EI PL NZ NA PO NC
2000:0005 EBFC JMP 0003
-t
AX=0040 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=2000 IP=0003 NV UP EI PL NZ NA PO NC
2000:0003 01C0 ADD AX,AX
-t
AX=0080 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=2000 IP=0005 NV UP EI PL NZ NA PO NC
2000:0005 EBFC JMP 0003
-t
AX=0080 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=2000 IP=0003 NV UP EI PL NZ NA PO NC
2000:0003 01C0 ADD AX,AX
-t
AX=0100 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B0A ES=0B0A SS=0B0A CS=2000 IP=0005 NV UP EI PL NZ NA PE NC
2000:0005 EBFC JMP 0003
(3)查看内存内容,ROM中的生产日期。
应该是这个吧,01/04/05:
-df000:fff0 ffff
F000:FFF0 EA 5B E0 00 F0 30 31 2F-30 34 2F 30 35 00 FC 00 .[...01/04/05...
-ef000:fff5
F000:FFF5 30.34
-df000:fff0 ffff
F000:FFF0 EA 5B E0 00 F0 30 31 2F-30 34 2F 30 35 00 FC 00 .[...01/04/05...
-ef000:fff5
F000:FFF5 30.39 31.39 2F.39
F000:FFF8 30.39 34.39 2F.39 30.39 35.39
-df000:fff0 ffff
F000:FFF0 EA 5B E0 00 F0 30 31 2F-30 34 2F 30 35 00 FC 00 .[...01/04/05...
(4)向内存B8100H的单元填写数据。
我试了好几个地址,发现显示器左上角的地址是B8000H,右上角地址为B809EH。一个字对应一个字符。
这是我得出的结论,不知道对不对。
☺☻♥♦♣♠•◘○◙♂♀ ◄↕‼¶§▬↨ ↑↓→←∟↔▲▼
☺☺☺☺☺☺☺☺E~1\ADMINI~1>debug
-e b800:0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8
-e b800:10 9 9 a a b b c c d d e e f f 10 10
-e b800:80 11 11 12 12 13 13 14 14 15 15 16 16 17 17
-e b800:90 18 18 19 19 1a 1a 1b 1b 1c 1c 1d 1d 1e 1e 1f 1f
-e b800:a0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
第一行,我删除了好多空格,为了让在这里的行的显示跟dos下的一样。
增加一些:
123456789ABC
C:\Documents and Settings\Administrator>debug
-e b800:00 31 1 32 2 33 3 34 4 35 5 36 6 37 7
-e b800:0e 38 8 39 9 41 a 42 b 43 c
- [游客] 感谢 11/15 22:10
- [游客] 把:DD 5937000,改成:DD 4294967295,你的错误,立刻就暴露出来。呵呵 05/19 18:30
- [游客] 计算人均时,是DD型除以DW型。把DD型的最大值代进去,你的程序,就溢出了。 05/19 18:28
- [游客] 注意不溢出的除法。 05/19 18:25
- [游客] 老师好啊~ 06/28 11:01
- [longphui] 谢谢 09/03 20:10
- [longphui] 谢谢 09/03 16:23
- [longphui] 谢谢 09/02 15:26
- [longphui] 谢谢 09/02 09:13
- [sissim] 恩恩,谢谢指正 01/11 18:24
- [even3] 亲,你好。。。这边有一个汇编语言程序,但是就是不知道哪里出了问题,问了很多人,都不知道想麻烦您一下, 05/16 20:48
- [mcjfo] 楼主可以帮我解决这个问题吗?谢谢! 为什么它会跳过JMP DD 指令不执行啊 小弟搞了好久抖没 06/08 06:50
[ tinyparticle 发表于 2009-10-22 20:26 ]
(4)向内存B8100H的单元填写数据。
我试了好几个地址,发现显示器左上角的地址是B8000H,右上角地址为B809EH。一个字对应一个字符。
这是我得出的结论,不知道对不对。
===================================================
博主观察挺仔细的
显存在B800:0000H中,两个byte代表屏幕上显示的一个字符.第一byte表是要显示的字符的ASCII码,第二byte表示显示的字符的颜色及其背景
这个后面会学到的:)
[ sissim 发表于 2009-10-22 21:01 ]
哦哦,这么回事。我刚才一直在考虑,字符的ascii码不是一个字节嘛,怎么会两个字节对应一个字符呢。而且颜色也都不一样。但是就没有联系起来思考,呵呵。
[ dallas48 发表于 2011-01-06 10:37 ]
请问为什么我得出右上角地址是B809c?到b809:d它就不显示了
这和显示器尺寸有关系么?
[ longphui 发表于 2012-09-03 16:23 ]
谢谢