|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- Code SEGMENT
- ASSUME CS:code,DS:code
- ORG 100H ;从100H处开始存放下列指令
- Start:MOV AX,code ;将DS置成code段的首地址
- MOV DS,AX
- MOV SI,200H ;取第一个数的首地址
- MOV AX,[SI] ;将第一个数的低16位取到AX
- MOV DI,204H ;取第二个数的首地址
- ADD AX,[DI] ;第一个数和第二个数的低16应相加
- MOV [SI+8],AX ;低16位相加的结果送到208H和209H单元
- MOV AX,[SI+2] ;取第一个数的高16位送到AX中
- ADD AX,[DI+2] ;两个数的高16位相加
- MOV [SI+0AH],AX ;高16位相加的结果送到20AH,20BH单元
- MOV AX,4C00H ;使用DOS的4CH号功能调用
- INT 21H ;进入功能调用,返回DOS
- ORG 200H ;从200H处开始存放下列数据
- DD 12345678h,654387A9h,0h ;被加数、加数、和
- Code ENDS
- END start
- 调试过程:
- ① 进入Debug并装入可执行文件HB.EXE
- D:\MASM>Debug HB.EXE
- -
- ② 观察寄存器初始状态
- -R
- AX=0000 BX=0000 CX=020C DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
- DS=1892 ES=1892 SS=18A2 CS=18A2 IP=0100 NV UP EI PL NZ NA PO NC
- 18A2:0100 B8A218 MOV AX,18A2
- ③ 以单步工作方式开始运行程序
- -T
- AX=18A2 BX=0000 CX=020C DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
- DS=1892 ES=1892 SS=18A2 CS=18A2 IP=0103 NV UP EI PL NZ NA PO NC
- 18A2:0103 8ED8 MOV DS,AX
- -T
- AX=18A2 BX=0000 CX=020C DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
- DS=18A2 ES=1892 SS=18A2 CS=18A2 IP=0105 NV UP EI PL NZ NA PO NC
- 18A2:0105 BE0002 MOV SI,0200
- ④ 观察用户程序数据段初始内容(D 地址)
- -D 200 20F
- 18A2:0200 78 56 34 12 A9 87 43 65-00 00 00 00 00 74 13 50 xV4...Ce.....t.P
- -
- ⑤ 连续工作方式运行程序至返回DOS前(设断点),查看运行结果。为此,现使用U命令反汇编。(U 地址)
- -U 100
- 18A2:0100 B8A218 MOV AX,18A2
- 18A2:0103 8ED8 MOV DS,AX
- 18A2:0105 BE0002 MOV SI,0200
- 18A2:0108 8B04 MOV AX,[SI]
- 18A2:010A BF0402 MOV DI,0204
- 18A2:010D 0305 ADD AX,[DI]
- 18A2:010F 894408 MOV [SI+08],AX
- 18A2:0112 8B4402 MOV AX,[SI+02]
- 18A2:0115 034502 ADD AX,[DI+02]
- 18A2:0118 89440A MOV [SI+0A],AX
- 18A2:011B B8004C MOV AX,4C00
- 18A2:011E CD21 INT 21
- -
- 可见,要执行10条指令,至011B处停止(=地址)
- -G=100,011B
- AX=7777 BX=0000 CX=020C DX=0000 SP=0000 BP=0000 SI=0200 DI=0204
- DS=18A2 ES=1892 SS=18A2 CS=18A2 IP=011B NV UP EI PL NZ NA PE NC
- 18A2:011B B8004C MOV AX,4C00
- -D 200 20F
- 18A2:0200 78 56 34 12 A9 87 43 65-21 DE 77 77 43 43 83 06 xV4...Ce!.wwCC..
复制代码
本帖最后由 xie1234abc 于 2020-5-15 13:57 编辑
D 200 20F 18A2:0200 的最后的43 43 83 06 xV4...Ce!.wwCC..什么意思啊?
答:43 43 83 06是别的程序的内存
“xV4...Ce!.wwCC..”是18A2:0200~18A2:020F 对应的ASCII码
另外,你那程序会出错,低位相加时进位被丢失了。
如果,将被加数和加数改成这样,1234ABCDh,6543FEDCh。
结果将出错,你可以似下,用adc指令可解决这个问题。
望采纳!
|
|