微笑向暖~ 发表于 2017-11-3 22:48:46

这两个程序加了///////////////的会不会矛盾,第一个add al,ds:[bx+16]一直往后叠...

本帖最后由 微笑向暖~ 于 2017-11-4 15:53 编辑

程序如下,编写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


程序如下,编写code段中的代码,用push指令将a段中的前8个字型数据,逆序存储到b段中。
assume cs:code
a segment
dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends
b segment
dw 0,0,0,0,0,0,0,0
b ends
code segment
start:
mov ax,a
mov ds,ax
mov bx,0
mov ax,b
mov ss,ax
mov sp,16      ////////////////
mov cx,8
s:
push
inc bx
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start

这两个程序加了///////////////的会不会矛盾,第一个add al,ds:一直往后叠加,而第二个mov sp,16则不是,(大家应该理解我说的什么意思)那么第一个可以写成第二个这样吗???
这两种形式都可以么?还是说其中有一种是错的?
求指教!!!

BngThea 发表于 2017-11-4 10:17:06

第二个完全没看出来哪里有相加的操作

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

BngThea 发表于 2017-11-4 10:17
第二个完全没看出来哪里有相加的操作

我的意思是偏移地址,他们的偏移地址不一样

BngThea 发表于 2017-11-4 10:26:11

微笑向暖~ 发表于 2017-11-4 10:21
我的意思是偏移地址,他们的偏移地址不一样

所以呢?两种实现方案做的事完全不一样啊

微笑向暖~ 发表于 2017-11-4 15:55:32

BngThea 发表于 2017-11-4 10:26
所以呢?两种实现方案做的事完全不一样啊

第一个定义的是字节,偏移地址是16,第二个定义的是字,偏移地址也是16,这会不会有点矛盾,还是说怎莫说???

BngThea 发表于 2017-11-4 17:19:27

微笑向暖~ 发表于 2017-11-4 15:55
第一个定义的是字节,偏移地址是16,第二个定义的是字,偏移地址也是16,这会不会有点矛盾,还是说怎莫说 ...

不是都有inc bx语句吗
就每次循环增量而言,两者没区别啊
页: [1]
查看完整版本: 这两个程序加了///////////////的会不会矛盾,第一个add al,ds:[bx+16]一直往后叠...