微笑向暖~ 发表于 2017-11-3 21:42:15

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

程序如下,编写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:         //
add al,ds:   //
mov ds:,al    //求解释这三条指令是什么意思?
inc bx
loop s
mov ax,4c00h
int 21h

code ends
end start

渡漫 发表于 2017-11-4 09:16:03

简单解释一下,第一条的意思是将基址为ds,偏移地址为bx的值放到al中,第二条是指将偏移地址为bx+16的值与al的值相加然后放到al里,第三条就是把al的值放到内存偏移地址为bx+32里头去,分析题目要求,私以为应该是+8和+16而不是+16和+32,希望能帮到你

BngThea 发表于 2017-11-4 09:49:12

mov al,ds:         //将段地址为ds,偏移地址为bx的内存中的值移动到al中
add al,ds:   //将段地址为ds,偏移地址为bx+16的内存中值加到al中
mov ds:,al    //将al的值移动到段地址为ds,偏移地址为bx+32的内存中

微笑向暖~ 发表于 2017-11-4 10:19:10

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

我也是这么觉得的,但是事实好像不是这样的

兰陵月 发表于 2017-11-4 10:31:48

本帖最后由 兰陵月 于 2017-11-4 10:41 编辑

微笑向暖~ 发表于 2017-11-4 10:19
我也是这么觉得的,但是事实好像不是这样的

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

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

兰陵月 发表于 2017-11-4 10:48:11

微笑向暖~ 发表于 2017-11-4 10:19
我也是这么觉得的,但是事实好像不是这样的

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

编译后,你的程序运行结果正确

兰陵月 发表于 2017-11-4 10:49:19

微笑向暖~ 发表于 2017-11-4 10:19
我也是这么觉得的,但是事实好像不是这样的

我这边程序运行正确,我不理解你所说的“事实好像不是这样的”是何意??????

渡漫 发表于 2017-11-4 11:43:57

兰陵月 发表于 2017-11-4 10:31
原先回答错误,忘记考虑段是16字节对齐方式。。。。。。。

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

汇编没学多少,想请教一下段是16字节对其方式是什么意思,为什么不是+8和+16呢?

兰陵月 发表于 2017-11-4 12:30:50

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

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

如果程序员设计程序时,长度不是16的倍数,则系统自动补齐。

兰陵月 发表于 2017-11-4 12:32:07

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

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

上面这个理解是错误的,这就是没有考虑到段是16字节对齐的情况。

渡漫 发表于 2017-11-4 13:14:01

兰陵月 发表于 2017-11-4 12:30
16字节对齐的方式意思是一个段的长度(以字节计)能够被16整除。

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

{:10_266:}{:10_266:}{:10_266:}貌似我还没学到这就开始误导人了,真是嗅大了,不过也理解了,谢谢

兰陵月 发表于 2017-11-4 13:38:24

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

没事,其实有时候就是突然忘记了而已,比如最开始的回答就是跟你一样,哈哈

微笑向暖~ 发表于 2017-11-4 15:41:47

兰陵月 发表于 2017-11-4 10:49
我这边程序运行正确,我不理解你所说的“事实好像不是这样的”是何意??????

我原来的理解呢,也是加8和加16,但是程序中呢,是加16和加32,这是我不理解的地方,后来我想清楚了,虽然定义的是字节数据,应该是加8和加16的,但是...........................,好吧,我也不知道我是怎么想的,反正,,不知道该怎么说了
页: [1]
查看完整版本: 求解释这三条指令是什么意思?