关于汇编语言中的PUSH问题。
PUSH的操作过程是: (SP)<--(SP)-2,((sp))<--OPRD 即先修改堆栈指针SP(压入时为自动减2),然后,将指定 的操作数送入新的栈顶位置。
此处的((SP))<--OPRD,也可以理解为:
[(SS)*16+(SP)]<--OPRD 或 [SS:SP]<--OPRD
示例: PUSH DX
PUSH BP
PUSH CS
PUSH DATA1
PUSH ALFA[BX][SI]
注意: 每进行一次压入操作,都压入一个字(16位)。
扩展资料
PUSH 指令
PUSH 指令首先减少ESP的值,再将源操作数复制到堆栈。操作数是16位的,则ESP减 2,操作数是32位的,则 ESP减4,PUSH指令有3种格式:
PUSH reg/mem16
PUSH reg/mem32
PUSH inm32
PUSH的操作过程是:
(SP)<--(SP)-2,((sp))<--OPRD
即先修改堆栈指针SP(压入时为自动减2),然后,将指定
的操作数送入新的栈顶位置。
此处的((SP))<--OPRD,也可以理解为:
[(SS)*16+(SP)]<--OPRD
或
[SS:SP]<--OPRD
示例:
PUSH
DX
PUSH
BP
PUSH
CS
PUSH
DATA1
PUSH
ALFA[BX][SI]
注意:
每进行一次压入操作,都压入一个字(16位)。
扩展资料
PUSH
指令
PUSH
指令首先减少ESP的值,再将源操作数复制到堆栈。操作数是16位的,则ESP减
2,操作数是32位的,则
ESP减4,PUSH指令有3种格式:
PUSH
reg/mem16
PUSH
reg/mem32
PUSH
inm32
如对字符系列检测时:abcdefaceda
首次进入,CX=11,SI指向第一个字符
PUSH CX在堆栈保存CX,
循环利用CX,结合LOOP COMP实现整个字符系列遍历检测(所谓的内循环)
取出CX赋予DX,--DX,检测是否为零,即是否还有字符需要检测
【事实上push,pop这些操作你只需当它是参数传递与保存即可】事实上
第二行与第三行push cx,pop dx完全没意义,可以去掉
事实上,在NEXT1子指令系列中
可以不用DX,直接使用 POP CX, 掉DEC DX与MOV CX,DX,将JNZ REPET 改为LOOP REPET
顺便说一句,事实上该程序的SI事实上是:第一次遍历先指向最后一个字符,然后向前遍历;第二次遍历指向倒数第二个字符,然后向前遍历;。。。
推DS
小斧头,斧头
PUSH AX
COM程序通常使用,储存在DS:0000一个INT 20H指令,执行上面的代码,以便使用RETF INT 20H ,从而使该程序结束。
所以专业,你为什么不读书了吗?
数据寄存器累加器,通用寄存器。累加器保存的计算结果,通用寄存器保存数据。
代码段,当然,是保存当前正在运行的代码;
数据段的数据保存在当前程序;
保存的返回地址和程序参数(地址堆栈段)子程序调用;
的其他部分也保存数据,但一般保存的批处理计算的结果。
基本的框架如下自己分析下不难理解!
REPET:
PUSH SI
PUSH CX
PUSH CX
POP DX
......
NEXT1: POP DX
POP SI
DEC SI
DEC DX
MOV CX,DX
JNZ REPET
第一次是保存CX,第二次是将CX值传递给DX
汇编语言中的PUSH的用法
PUSH的操作过程是: (SP)<--(SP)-2,((sp))<--OPRD 即先修改堆栈指针SP(压入时为自动减2),然后,将指定 的操作数送入新的栈顶位置。此处的((SP))<--OPRD,也可以理解为:[(SS)*16+(SP)]<--OPRD 或 [SS:SP]<--OPRD 示例: PUSH DX PUSH BP PUSH CS PUSH DATA1 PUSH ALFA...
汇编中push指令后面可以直接加数字吗?
push指令后面可以压入立即值,但限于一字节,即0-255push1push12push可以压入内存,但必须指定型别pushwordptr[100]pushdwordptr[100]push可以压入任何16或32位暂存器(ip除外)使用格式为:PUSHDATA比如:PUSH 50当SP=0100H时,执行该语句后0100H这个地址中就存入了50这个数据。与之对应的是POP语句,...
汇编push 问题
这是由于你指定的SS=0200H太小,这是DOS系统内核区。当你用PUSH指令往这个段里写数据时,实际是在破坏DOS系统。在DOS系统核心已被破坏得不知什么样子的情况下,出现各种异常都有可能。使用DEBUG时,要注意一点:不带参数直接启动DEBUG时的DS、ES、SS的值已经指向了用户可用内存的最低端。实验过程中,...
汇编语言 PUSH 用法疑问
即push 0FFFFh,push不一定是将16位源操作数压入栈,32位的程序,就是压入32位的数值
关于汇编语言中的PUSH问题。
【事实上push,pop这些操作你只需当它是参数传递与保存即可】事实上 第二行与第三行push cx,pop dx完全没意义,可以去掉 事实上,在NEXT1子指令系列中 可以不用DX,直接使用 POP CX, 掉DEC DX与MOV CX,DX,将JNZ REPET 改为LOOP REPET 顺便说一句,事实上该程序的SI事实上是:第一次遍历先...
汇编(关于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...
汇编语言关于PUSH的问题
sp指针指向0100 但是【栈底】为2000:00FF,所以push后sp指向00FE 即物理地址为2000:00FE
汇编语言中的PUSH的用法
PUSH的操作过程是:(SP)<--(SP)-2,((sp))<--OPRD 即先修改堆栈指针SP(压入时为自动减2),然后,将指定 的操作数送入新的栈顶位置。此处的((SP))<--OPRD,也可以理解为:[(SS)*16+(SP)]<--OPRD 或 [SS:SP]<--OPRD 示例:PUSH DX PUSH BP PUSH CS PUSH DATA1 PUSH ALFA[BX...
汇编语言里面关于 push mov lea的一点小问题。
push 的后面,应该写16位的操作数,可以是寄存器名称,如:push AX push BX ……--- mov eax,[xxx],是把逗号右边,当做源,左边当做目的。80x86 的汇编,都是这样的。其它的汇编语言,也有用左边的当做源。
关于PUSH的问题,求汇编帝!!!
eax就是CPU的一个元件,无什么地址可言(当然这只是我的理解),就是负责传递数据,所以 push eax就是把里面装的值压入堆栈。汇编都是直观的,是这样就是这样,mov eax,12345678 push eax 只是把12345678压入。如果压入值, 汇编会很直观地直接这样显示 [eax] 而不是 eax ...