鱼C论坛

 找回密码
 立即注册
查看: 2655|回复: 12

求解释这三条指令是什么意思?

[复制链接]
发表于 2017-11-3 21:42:15 | 显示全部楼层 |阅读模式

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

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

x
程序如下,编写code段中的内容,将a段和b段中的数据依次相加,将结果存到c段中。
assume cs:code

a segment
db 1,2,3,4,5,6,7,8
a ends

b segment
db 1,2,3,4,5,6,7,8
b ends

c segment
db 0,0,0,0,0,0,0,0
c ends

code segment
start:
mov ax,a
mov ds,ax
mov bx,0

mov cx,8
s:
mov al,ds:[bx]           //
add al,ds:[bx+16]     //
mov ds:[bx+32],al    //求解释这三条指令是什么意思?
inc bx
loop s
mov ax,4c00h
int 21h

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

使用道具 举报

发表于 2017-11-4 09:16:03 | 显示全部楼层
简单解释一下,第一条的意思是将基址为ds,偏移地址为bx的值放到al中,第二条是指将偏移地址为bx+16的值与al的值相加然后放到al里,第三条就是把al的值放到内存偏移地址为bx+32里头去,分析题目要求,私以为应该是+8和+16而不是+16和+32,希望能帮到你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-4 09:49:12 | 显示全部楼层
mov al,ds:[bx]           //将段地址为ds,偏移地址为bx的内存中的值移动到al中
add al,ds:[bx+16]     //将段地址为ds,偏移地址为bx+16的内存中值加到al中
mov ds:[bx+32],al    //将al的值移动到段地址为ds,偏移地址为bx+32的内存中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-4 10:19:10 | 显示全部楼层
渡漫 发表于 2017-11-4 09:16
简单解释一下,第一条的意思是将基址为ds,偏移地址为bx的值放到al中,第二条是指将偏移地址为bx+16的值与a ...

我也是这么觉得的,但是事实好像不是这样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-4 10:31:48 | 显示全部楼层
本帖最后由 兰陵月 于 2017-11-4 10:41 编辑
微笑向暖~ 发表于 2017-11-4 10:19
我也是这么觉得的,但是事实好像不是这样的


原先回答错误,忘记考虑段是16字节对齐方式。。。。。。。

晕死,我竟然犯了这种低级错误。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-4 10:48:11 | 显示全部楼层
微笑向暖~ 发表于 2017-11-4 10:19
我也是这么觉得的,但是事实好像不是这样的

1、将段名称c改成d
2、将//改成;

编译后,你的程序运行结果正确
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-4 10:49:19 | 显示全部楼层
微笑向暖~ 发表于 2017-11-4 10:19
我也是这么觉得的,但是事实好像不是这样的

我这边程序运行正确,我不理解你所说的“事实好像不是这样的”是何意??????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-4 11:43:57 | 显示全部楼层
兰陵月 发表于 2017-11-4 10:31
原先回答错误,忘记考虑段是16字节对齐方式。。。。。。。

晕死,我竟然犯了这种低级错误。

汇编没学多少,想请教一下段是16字节对其方式是什么意思,为什么不是+8和+16呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-4 12:30:50 | 显示全部楼层
渡漫 发表于 2017-11-4 11:43
汇编没学多少,想请教一下段是16字节对其方式是什么意思,为什么不是+8和+16呢?

16字节对齐的方式意思是一个段的长度(以字节计)能够被16整除。

如果程序员设计程序时,长度不是16的倍数,则系统自动补齐。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-4 12:32:07 | 显示全部楼层
渡漫 发表于 2017-11-4 09:16
简单解释一下,第一条的意思是将基址为ds,偏移地址为bx的值放到al中,第二条是指将偏移地址为bx+16的值与a ...

私以为应该是+8和+16而不是+16和+32,希望能帮到你

上面这个理解是错误的,这就是没有考虑到段是16字节对齐的情况。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-4 13:14:01 | 显示全部楼层
兰陵月 发表于 2017-11-4 12:30
16字节对齐的方式意思是一个段的长度(以字节计)能够被16整除。

如果程序员设计程序时,长度不是16的 ...

貌似我还没学到这就开始误导人了,真是嗅大了,不过也理解了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-4 13:38:24 | 显示全部楼层
渡漫 发表于 2017-11-4 13:14
貌似我还没学到这就开始误导人了,真是嗅大了,不过也理解了,谢谢

没事,其实有时候就是突然忘记了而已,比如最开始的回答就是跟你一样,哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-4 15:41:47 | 显示全部楼层
兰陵月 发表于 2017-11-4 10:49
我这边程序运行正确,我不理解你所说的“事实好像不是这样的”是何意??????

我原来的理解呢,也是加8和加16,但是程序中呢,是加16和加32,这是我不理解的地方,后来我想清楚了,虽然定义的是字节数据,应该是加8和加16的,但是...........................,好吧,我也不知道我是怎么想的,反正,,不知道该怎么说了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 14:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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