初学汇编,DEBUG的E命令是咋回事呢?

[复制链接]
查看11 | 回复4 | 2021-1-27 06:46:23 | 显示全部楼层 |阅读模式
我用DEBUG调试时
-EES:010
上面的命令怎么改变不了ES:0的内容啊
-DES:0L1
还是原来的内容;
但是下面的就可以,咋回事呢?
-EDS:010
程序附录:

;计算从BEGINSEG:BEGINOFFSET开始的1024个字节的正数个数,负数个数和零的个数,并打印之
COUNT=1024
BEGINSEG=0f000H
BEGINOFFSET=0
dsegsegment
cnplusdw0ffffH
cnnegdw0ffffH
cnzerodw0ffffH
messplusdb'Thecountofplus:','$'
messnegdb'Thecountofnegative:','$'
messzerodb'Thecountofzero:','$'
dsegends
csegsegment
assumecs:cseg,ds:dseg,es:dseg
start:
movax,dseg
movds,ax
movax,BEGINSEG
moves,ax
movcx,COUNT
movcnplus,0
movcnneg,0
movcnzero,0
movsi,-1
xxx:
incsi
cmpsi,cx
jaeshortprintmess
andes:[si],0ffffH
jzinczero
jsincneg
inccnplus
jmpxxx
inczero:
inccnzero
jmpxxx
incneg:
inccnneg
jmpxxx
printmess:
movdx,offsetmessplus
movah,9
int21H
movax,cnplus
callprintax
callnewline
;
movdx,offsetmessneg
movah,9
int21H
movax,cnneg
callprintax
callnewline
;
movdx,offsetmesszero
movah,9
int21H
movax,cnzero
callprintax
callnewline
;
movax,4c00H
int21H

;将AX中数值以十进制无符号数形式打印输出
;入口参数:AX
;出口参数:无
printaxprocnear
pushax
pushcx
pushsi
pushdx
;
movcx,10
movsi,5
again:
xordx,dx
divcx
adddl,30H
pushdx
decsi
jnzagain
;
movcx,5
movah,2
again2:
popdx
int21H
loopagain2
;
popdx
popsi
popcx
popax
ret
printaxendp
;回车换行
newlineproc
pushax
pushdx
movah,2
movdl,0dH
int21H
movah,2
movdl,0aH
int21H
popdx
popax
ret
newlineendp
csegends
endstart
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:46:23 | 显示全部楼层
只用过修改,没用过list
回复

使用道具 举报

千问 | 2021-1-27 06:46:23 | 显示全部楼层
E命令是改写内存中的内容,我是新手,好像也不能改,在内存FFF00H~FFFFFH的某个单元有主板上的ROM能改,但改了没有效果,等于没改
回复

使用道具 举报

千问 | 2021-1-27 06:46:23 | 显示全部楼层
这个字符调试比较繁琐,建议直接用td或者codeview单步调试观看嘛,变量寄存器内存区一目了然,不过看个人喜好了。
回复

使用道具 举报

千问 | 2021-1-27 06:46:23 | 显示全部楼层
因为debug是比较小的com文件,这种文件代码段和数据段是统一在一个段ds的,就是这样。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行