一个问题
红字处的语句为什么不合法啊??求解assume cs:code
d segment
db 0,0,0,0,0,0,0,0,
d ends
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
code segment
start:
mov ax,a
mov ds,ax
mov ax,b
mov es,ax
mov ax,d
mov ss,ax
mov bx,0
mov cx,8
s:
add ss:,es:
add ss:,ds:
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
本帖最后由 54085256 于 2013-1-22 16:36 编辑
任意时刻,SS:SP指向栈顶元素
assume cs:code
d segment
db 0,0,0,0,0,0,0,0
d ends
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
code segment
start:mov ax,a
mov ds,ax
mov ax,b
mov es,ax
mov ax,d
mov ss,ax
mov sp,0
mov bx,0
mov cx,8
s:push es:
push ds:
pop ds:
pop es:
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
54085256 发表于 2013-1-22 16:01 static/image/common/back.gif
任意时刻,SS:SP指向栈顶元素
关键我没用栈啊,只是用了ss寄存器而已 本帖最后由 54085256 于 2013-1-22 16:30 编辑
SS 只能用 push pop
SS 是栈的段地址
栈是具有特殊的访问方式
改下编译试试
你过没过我不知道,反正我是过了
ADD指令不能同时为两个内存操作数! s0512 发表于 2013-1-22 16:37 static/image/common/back.gif
ADD指令不能同时为两个内存操作数!
thankyou~~求教为什么:loveliness:。是cpu的限制,还是有什么内在机理? 54085256 发表于 2013-1-22 16:26 static/image/common/back.gif
SS 只能用 push pop
SS 是栈的段地址
灰常感谢{:1_1:} 刘金伟 发表于 2013-1-22 16:51 static/image/common/back.gif
thankyou~~求教为什么。是cpu的限制,还是有什么内在机理?
这个是出于效率方面的考虑。英特尔在设计芯片时就没支持这种内存到内存的ADD操作。
因为进行内存操作效率远比不上进行寄存器操作。
从内存取的数是放在寄存器中,从寄存器中再放回到内存中,如果用一条指令完成,
就需要进行2次存储器读写操作,这样就造成一条指令的效率太低。所以就干脆不支持。
COPY~~
s0512 发表于 2013-1-22 17:15 static/image/common/back.gif
这个是出于效率方面的考虑。英特尔在设计芯片时就没支持这种内存到内存的ADD操作。
因为进行内存操作效率 ...
{:7_168:}好详细!!明白了~~~~thankyou~~~!!! 源操作数和目的操作数不能是寄存器间接寻址,也就是目的和源操作数必须有一个寄存器。
页:
[1]