为什么汇编语言先sub ax,ax push ax,那么ax不是清零了后入栈么,为什么,谢谢

如题所述

用汇编语言编程,头几句,往往都是这么写。
其目的,是为了程序结束时,能够正确返回到 DOS 操作系统。
为什么?
其理由,在于 DOS 中。细节不多解释,就需要你这么做。
 
请及时采纳。
温馨提示:内容为网友见解,仅供参考
第1个回答  2020-02-13
是将ax清零后入栈。这样做比mov ax, 0 效率更高。

汇编语言 push ds sub ax,ax push ax 有什么用~
sub ax,ax:用ax-ax,也就是将ax清零 push ax:与push ds相同 顺便说明一下,堆栈是后进先出的,所以,你如果先后执行了push ds和push ax,那么,执行pop命令的时候,就应该先用pop ax,然后再用pop ds

汇编语言中Push ax指令执行后,ax的原内容在ax寄存器中还保存么?
AX原内容入栈了,可以理解为放到一个专用的存储器里了,出栈后再去出来即可。

汇编语言用堆栈指令将寄存器AX与SI的内容交换。 PUSH AX PUSH SI...
是数据的后进先出,不是寄存器的后进先出。这样就可以达到交换寄存器数据的目的。同样,如果不是要达到交换数据的目的,而仅仅是用栈保存寄存器的原值,那么就应该这么写:push AX push SI ……pop SI pop AX

汇编考试的一些问题:
汇编语言编写的程序,是在 DOS 环境下运行的。运行结束后,还应该返回 DOS。在程序的一开始,写入这些指令,目的是为了使用 RET 指令退出程序,返回 DOS。但是,现在多用 MOV AH, 4CH INT 21H 退出程序,上述代码,就没有用了。

汇编语言两条指令 push ax push ds 执行后结果是什么
push ds sub ax,ax push ax 这三条语句是为后面的ret做准备,ret即执行pop ip, pop cs,执行完ip的值为0,cs的值为ds。程序转移到程序PSP的起始地址,起始地址的前两个字节放的是int 20指令,用于返回DOS。不过不推荐这样做,现在常用 mov ax 4c00h int 21h;终止程序,返回值为al....

汇编(关于PUSH的SP问题)
MOV AX,N2 PUSH AX 同理SP=SP-2,此时SP=00FCH 物理地址=SS*10H+SP=3000H*10H+00FCH=300FCH CALL L1 调用子程序即过程调用,为了保护现场,会压栈保存断点,段内调用,说明L1的属性为NEAR,只需保存IP,SP=SP-2,但是如果是段间调用则需要保存CS和IP 那么SP=SP-4.不管怎么样,在执行完RET...

...汇编语言题,望一步一步解释下出栈和入栈到底是怎么进行的,谢谢了
不要看答案,照我的思路计算下来就对了。POP AX,出栈2字节,PUSH AX,入栈2字节,POP EAX 出栈4字节,PUSH EAX ,入栈4字节。SP就是根据这个来变化的。不管你采纳谁的答案,希望你采纳一个,这样才有人想帮您。也希望这些能对你有一些帮助。上一个问题即时查看。汇编是一门比较贴近硬件的语言...

汇编语言的一个空循环,有些看不懂能帮忙注释一下吗?谢谢~
DELAY: PUSH AX ; ax 入栈 PUSH DX ; dx 入栈 MOV DX,1000H ; 由dx,ax组成32位数 ,dx为高16位 MOV AX,0 ; ax为 低16位 S1: SUB AX,1 ; 低16位 减1 SBB DX,0 ; 高16位减借位 CMP ...

汇编语言的程序开始都有 PUSH DS MOV AX,0 PUSH AX 这三段有什么作用...
在程序的开始,在堆栈中压入了两次,分别是DS和0;在程序的末尾,使用了RET,就用到了压入的内容,这样就能结束程序,安全的返回DOS。想要弄清这几个操作,就必须了解“磁盘操作系统”,即DOS才行。这已经不是“汇编语言”的内容了。

汇编语言中,出栈后 出栈的那个数值在栈中会被清零吗?
不会被清零。汇编语言中,出栈是通过POP指令来实现的,首先看一下Intel手册中对于pop指令的描述:大致意思如下:Pop指令从栈顶加载值到目标操作数指定的位置,然后增加栈顶指针。目标操作数可以是一个通用寄存器,内存位置或者段寄存器。可以看到,手册中并没有提到出栈后Pop要清空原有位置的值。因为这是不...

相似回答