首先附代码
assume cs:code
code segment
dw 0123h,0456h
dw 0,0,0
start:
mov ax,cs
mov ss,ax ;设置栈段
mov sp,0Ah ;设置栈顶 A是栈偏移
mov bx,0 ;偏移
mov cx,2 ;设置
s:push cs:[bx]
add bx,2
loop s
mov bx,0
mov cx,2
s0:pop cs:[bx]
add bx,2
loop s0
mov ax,4c00h
int 21h
code ends
end start
观察汇编指令
这里出现命令 PUSH w.[BX]
我们的源命令 s:push cs:[bx]
疑问:w是什么?
解答:在8086环境下,汇编指令中的"w"通常表示"word",表示一个字(16位)。
疑问:push可以对字节操作吗?
实践:不可以对字节进行操作
搜索得出结论
1、push pop 只对字操作(不允许字节进栈)操作数长度为32位时进出栈为双字。
2、汇编语言中PUSH导致SP减2而不是加2。原因:栈在内存中实际存储结构是栈底在高地址,栈顶在低地址
3、8086push不可以使用立即数寻址方式(其他版本允许)
4、pop不可以使用立即数寻址方式,使用段寄存器时不可使用CS段寄存器。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_36561697/article/details/80699450
标签:8086,code,易错,pop,mov,cs,push,bx From: https://www.cnblogs.com/Mask2024/p/17991935