359853328 发表于 2013-11-7 10:14:35

汇编语言,用ax传递内存里的值,请帮忙分析一下,谢谢!!

本帖最后由 359853328 于 2013-11-7 10:19 编辑

汇编代码:assume cs:codesg,ds:data
data segmentdb 'ABCDEF'data ends

codesg segmentstart:mov ax,datamov ds,axmov ax,0b800Hmov es,ax
mov bx,0mov si,0mov di,1mov cx,6
s:mov ax,   ;1mov es:,ax   ;2mov al,0caH    ;3mov es:,al   ;4inc bxadd si,2add di,2loop s
mov ax,4c00hint 21h
codesg ends
end start
单步执行以上代码发现在1和2处,ax传递ds:和es:内存是,结果如下先把ds:内存处的值赋值给ax,ax赋值后为4241H后把ax的值放到es:处,但是发现ax的值为0720H,不是原来的4241H,这个是怎么回事呢
单步执行3和4处,也是同样的问题,结果如下:先把CAH赋值到ax的低8位,
然后再把CAH从ax中放入es:内存中,发现ax的低八位给内存的值是07H,

搞了半天没有看懂ax中的值没有变化,但是ax传递给内存的值怎么不是ax的值呢

ypyangpong 发表于 2013-11-7 11:54:55

你第2步还没执行啊,执行后就变成了ax的值了

ypyangpong 发表于 2013-11-7 12:51:53

刚把代码跑了下,还真是你说的那样,同求大手解答。。。。。

359853328 发表于 2013-11-7 13:50:39

呵呵
B8000H~B8F9F这个内存空间是字符模式的显示缓冲区,我希望在这个缓冲区放入我的字符,如:ABC,
希望屏幕输出我的字符

pengliang 发表于 2013-11-8 10:00:27

359853328 发表于 2013-11-7 13:50 static/image/common/back.gif
呵呵
B8000H~B8F9F这个内存空间是字符模式的显示缓冲区,我希望在这个缓冲区放入我的字符,如:ABC,
希望 ...

要输出字符串,在DOS下只能调用中断,直接写入缓冲区在WINDOWS系统下是不允许的。

E=MC2 发表于 2013-11-8 19:31:51

先把ds:内存处的值赋值给ax,ax赋值后为4241H

后把ax的值放到es:处,但是发现ax的值为0720H,不是原来的4241H,这个是怎么回事呢



我单步的时候 为啥 AX没有变成0720H呢? 显示4241而后紧接着就是42CA 从来没有变成0720H哦
页: [1]
查看完整版本: 汇编语言,用ax传递内存里的值,请帮忙分析一下,谢谢!!