8086汇编push pop 易错点总结

首先附代码

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

观察汇编指令

image
这里出现命令 PUSH w.[BX]
我们的源命令 s:push cs:[bx]

疑问:w是什么?

解答:在8086环境下,汇编指令中的"w"通常表示"word",表示一个字(16位)。

疑问:push可以对字节操作吗?

image
实践:不可以对字节进行操作

搜索得出结论

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

posted @ 2024-01-27 20:55  Mask_2022  阅读(184)  评论(0)    收藏  举报