来学习编程 发表于 2016-11-20 23:33:23

麻烦大家给解释一下

本帖最后由 来学习编程 于 2016-11-20 23:38 编辑

(6) 程序如下,编写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
请问assume后面没有假设a段,b段,为什么在程序里面可以直接使用。跟assume cs:code,ds:data,ss:stack这种有什么不同

zhangzhiteng 发表于 2016-11-21 16:46:35

同等大神出现!

代码农民 发表于 2016-11-21 17:44:01

本帖最后由 代码农民 于 2016-11-21 17:48 编辑

assume是伪指令,是写给编译器看的,目的是寻找偏移量所对应的段。

假设a分为两段,每段用一个变量单元来表示:
a segment

a1 dw 1,2,3,4,5,6,7,8,9
a2 dw 0ah,0bh,0ch,0dh,0eh,0fh,0ffh

a ends
“assume ds:a”之后a1,a2就是ds段的两个偏移地址了,编译器在计算a1和a2偏移地址的时候就往a段里找了。
你先这样简单地理解一下,等你学得越多,看的越多就明白了,因为这里面涉及到储存器变量的内容,一言难尽。
页: [1]
查看完整版本: 麻烦大家给解释一下