鱼C论坛

 找回密码
 立即注册
查看: 2206|回复: 5

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

[复制链接]
发表于 2013-11-7 10:14:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

汇编代码:

assume cs:codesg,ds:data


data segment

db 'ABCDEF'

data ends



codesg segment

start:

mov ax,data

mov ds,ax

mov ax,0b800H

mov es,ax


mov bx,0

mov si,0

mov di,1

mov cx,6


s:mov ax,[bx]   ;1

mov es:[si],ax   ;2

mov al,0caH    ;3

mov es:[di],al   ;4

inc bx

add si,2

add di,2

loop s


mov ax,4c00h

int 21h


codesg ends


end start


单步执行以上代码发现在1和2处,ax传递ds:[bx]和es:[si]内存是,结果如下

1.jpg

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

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


单步执行3和4处,也是同样的问题,结果如下:

1.jpg

先把CAH赋值到ax的低8位,

然后再把CAH从ax中放入es:[di]内存中,发现ax的低八位给内存的值是07H,



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


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-7 11:54:55 | 显示全部楼层
你第2步还没执行啊,执行后就变成了ax的值了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-7 12:51:53 | 显示全部楼层
刚把代码跑了下,还真是你说的那样,同求大手解答。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-7 13:50:39 | 显示全部楼层
呵呵
B8000H~B8F9F这个内存空间是字符模式的显示缓冲区,我希望在这个缓冲区放入我的字符,如:ABC,
希望屏幕输出我的字符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-8 10:00:27 | 显示全部楼层

要输出字符串,在DOS下只能调用中断,直接写入缓冲区在WINDOWS系统下是不允许的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-8 19:31:51 | 显示全部楼层
先把ds:[bx]内存处的值赋值给ax,ax赋值后为4241H

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

我单步的时候 为啥 AX没有变成0720H呢? 显示4241而后紧接着就是42CA 从来没有变成0720H哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-28 19:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表