一道汇编语言题,望一步一步解释下出栈和入栈到底是怎么进行的,谢谢了
你的图片已经上传!
好好学习天天向上!
呵呵,真是不好意思。
ESP=1FFEH ,才对!
真是不好意思了。
ax,bx,cx,这些是16位的汇编寄存器。
EAX,EBX,ECX,是32位的汇编寄存器。我把ax,bx,cx,.....这些当成EAX,EBX......了,汇编来计算时所有入栈、出栈都是加的4。所以才错了。
它们入栈、出栈的占用空间的大小是不一样的。
16位的汇编是2字节,32位的是4字节所以搞错。
把图中的加、减4换成加减2就对了。
当成32位的汇编了,push 一次。ESP-4
在16位汇编中:
push ax sp-2 ;记住入栈-2,也就是分配16位,2个字节的空间,用来存放ax
push bx sp-4
push cx sp-6
pop ax sp-6+2 ax=5566H ; 出栈一次,腾出2字节16位的空间,还给系统,系统回收。
pop cx sp-6+4 cx=3344H
sp=1FFCH
2字节=(16位)/(8位/1字节),即每8位为一个字节
正如注释的那样
ax 是16的寄存器,所以sp-2或+2.EAX是32的寄存器,那么ESP-4或ESP+4
如果程序要调用或者响应中断的话,要将寄存器,标志位等压栈,这是为了保护现场,方便调用或中断响应结束后继续执行原程序。你可以根据程序来具体分析。
关于上次对您的提问表示歉意!因为在画堆栈图时把AX当成EAX了,在此表示歉意。
对你的回复已做了相应的更正,望即时查看。
首先,明白EAX是32位的寄存器,AB是16位的寄存器。分别需要4字节、2字节的堆栈空间。知道这个方便我们计算SP的值。sp是16位的。
一般是没有这样的代码的!在有EAX的系统中高位为AH低位为AL,不过没有关系,系统也会认识,这就是windows的向下兼容。ax是早期的16的操作系统用的,EAX是现在大家用的XP,还有64位的WIN7.
按您的意思....
代码分析如下:
PUSH EAX 入栈EAX,需4字节,故SP-4 00123456H入栈
PUSH AX 需2字节,故SP-4-2 00123456h ,入栈3456H 。
POP BX 废弃2字节,故SP-4-2+2 00123456 3456,出栈3456H,BX=3456H,EBX=0102 3456H
PUSH EBX 入栈EBX,需4字节,故SP-4-2+2-4 00123456 入栈 01023456H
PUSH CX 需2字节,故SP-4-2+2-4-4 00123456 01023456 入栈0108H
POP EAX 废弃2字节,故SP-4-2+2-4-4+4 00123456 01023456 0108 出栈34560108 AX=0108H,EAX =34560108H
POP CX 废弃2字节,故SP-4-2+2-4-4+4+2 00123456 0102 出栈0102 CX=0102H ECX=05060102H
因而 EAX=34560108H
EBX=01023456H
ECX=05060102H
SP=1FFAH
不要看答案,照我的思路计算下来就对了。
POP AX,出栈2字节,PUSH AX,入栈2字节,POP EAX 出栈4字节,PUSH EAX ,入栈4字节。
SP就是根据这个来变化的。
不管你采纳谁的答案,希望你采纳一个,这样才有人想帮您。
也希望这些能对你有一些帮助。上一个问题即时查看。
汇编是一门比较贴近硬件的语言。如果有机会查看相关书籍不要错过。盲目的学,会浪费你不少的时间。比如,堆栈究竟是什么?数据究竟怎么存放?为什么要这样放....Win32下可不像Win16..也许换个系统你就不会了.加油!
更具从上到下的顺序,如下:
第一步将EAX(123456)压入栈顶;
又将AX压入栈顶;
出栈数据到BX(AX);
将EBX(01020304)压入栈,此时是第二层;
又将CX压入栈(三层);
出栈数据到EAX(CX);
出栈数据到CX(01020304);
各寄存器值EAX(CX);(EBX)=01020304H ;(ECX)=05060108H ;SP(2000H-1);AX不变;
BX(AX);CX(01020304H)
一道汇编语言题,望一步一步解释下出栈和入栈到底是怎么进行的...
因为在画堆栈图时把AX当成EAX了,在此表示歉意。对你的回复已做了相应的更正,望即时查看。首先,明白EAX是32位的寄存器,AB是16位的寄存器。分别需要4字节、2字节的堆栈空间。知道这个方便我们计算SP的值。sp是16位的。一般是没有这样的代码的!在有EAX的系统中高位为AH低位为AL,不过没有关系,系...
一道汇编语言题,望详细解释
ESP=1FFEH ,才对!真是不好意思了。ax,bx,cx,这些是16位的汇编寄存器。EAX,EBX,ECX,是32位的汇编寄存器。我把ax,bx,cx,...这些当成EAX,EBX...了,汇编来计算时所有入栈、出栈都是加的4。所以才错了。它们入栈、出栈的占用空间的大小是不一样的。16位的汇编是2字节,32位的是4字节所以...
汇编语言的题目,,希望每一步都解释下。。。
ENTRY DW 3 ;设置ENTRY数据段里有一个数据为3 MOV BX ,OFFSET TABLE;把TABLE的地址给BX DW字格式:存入的是1000D,2000D,3000D……十进制,换成16进制就是1E00H 第二题:INT 20是中断 ax=8D00H dx没有用到,因为2340H*4在ax中够存,所以dx=0,dx:ax=高八位:低八位(...
关于汇编语言的问题,希望有人可以帮我编写一下
意思是将200h,201h...20fh这1个地址里的数据相加,和存入300h,在200h到20fh里面找到数据大于75h的数据,存到400h中
在学习汇编语言的时候有这么一道题不能理解,希望高手解答,谢谢!
这你个问题高手不愿答,楼上三位又都是混分的。我也在学汇编,说一下我的理解 首先内存中的数字是按高高低的原则存放的,就是高位放高字节,低位放低字节:如数字:0123H,在内存中表现形式为:地址 内容 ds:0 23 ds:1 01 程序中入栈是以字为单位,出栈也是如此。但如果是字符串,如...
帮我看看汇编语言的这俩道题?希望能写出具体思路
1、段地址给定,偏移地址变换,而微机的物理地址==段地址左移四位+偏移地址 2、第二道题跟第一道题同样的思路,短地址就决定了物理空间的前面四位
汇编语言习题
=0E7H,(126A4H)=9DH,(126A5H)=16H,(21350H)=51HMOV AX,1352HAX=1352HMOV 0150H [BX],CH ; 0150H [BX] = (DS)x10H + 150H + [bx]=11350H(11350H)=33H ; 只赋值了[11350h]一个字节,(11351H)=3CH ; [11351h]没有改变MOV AX,0150H[BP];0150H[BP] = (...
一个汇编语言程序,有一点小问题,希望高手帮我修改下
;1.修改整体逻辑,可以按任何顺序按下P1.1,P1.2,P1.3 ;2.修改原二进制码错误 ;P1.0---(B=2秒,Y=5秒,B=2秒,L=2秒),重复4次 ;P1.1---L=2秒 ;P1.2---(B=2秒,Y=5秒,B=2秒,L=2秒),重复两次 L1: JB P1.1,L3 ;未按P1.0,转判P1.2 MOV ...
困扰我一下午的汇编题,虽然结果达到了。但是DEBUG却不尽人意,望高手...
这一问,说明这个程序是16位汇编,即分段式管理。16位汇编语言,最多可以定义和使用4个段:代码段、数据段、附加数据段、堆栈段。问题给出三组数据,且要求在不同的数据段,而16位汇编最多只允许定义两个数据段,所以,必须把其中的两组数据合并在一个数据段,或者把其中一组数据放在代码段。下面的...
汇编语言程序设计题
汇编语言程序设计题 请各位达人帮忙,题目如下:从键盘上输入2个10位数以内(位数可变)十六进制数,对其求和并显示结果,程序运行时提示输入加数和被加数,求完和显示结果后,显示继续和退出。非常谢谢!... 请各位达人帮忙,题目如下:从键盘上输入2个10位数以内(位数可变)十六进制数,对其求和并显示结果,程序运行时提示输入...
蔡水格来: 答:指令执行后,(AX) = 90F7H 过程:此条指令的寻址方式为基址变址寻址,有效地址为:(BX)+(SI)= 1200H + 0002H = 1202H 因为基址寄存器是BX,所以段地址在DS中,其值为 3000H 物理地址 = 段地址 * 10H + 有效地址 = 3000H*10H + 1202H = 31202H 源操作数为一个16位的字操作数.其低位字节在31202H中,高位字节在31202H+1=31203H中.根据题意,(31020H)= 0F7H, (31203H)=90H 所以,操作数为90F7H
荣成市15548468234: 谁能给我解答一道汇编语言的题目阿,不胜感激!?
蔡水格来: .data buf1 db 'input number:0-9',0ah,0dh,'$' buf2 db 'error',0ah,0dh,'$' .code start: mov ax,@data mov ds,ax lea dx,buf1 mov ah,0ah int 21h mov ah,01h int 21h cmp al,0 jl exit cmp al,9 jg exit mov ah,4ch int 21h exit: lea dx,buf2 mov ah,0ah int 21h mov ah,4ch int 21h end
荣成市15548468234: 汇编语言,这是一道题以及答案,我不知道答案是怎么算来的,请帮我分析 ...?
蔡水格来: MOV P1.3,C;P1.3=1 MOV P1.4,C;P1.4=1 MOV C,P1.6;CY=0 MOV P3.6,C;P3.6=0 MOV C,P1.0;CY=1 MOV P3.4,C;P3.4=1 综上所述 CY=1 P1=10111011 P3=00111100 需要注意的是:从右往左依次是第0、1、2、3、4、5、6、7位,按照程序将相应位修改即可
荣成市15548468234: 关于汇编语言的一道题请大侠赐教 - ?
蔡水格来: 展开全部$表示当前地址, $-X表示当前地址减去X的首地址.W EQU $-X表示用W的首地址减去X的首地址,却从X开始到W为止,所有单元的字节数.X DB 2 DUP(1,2,3 DUP(3),4 DUP(1,0)) ;X定义2*(1+1+3*1+4*2)=26个字节单元 Y DD 24 DUP(?) ;Y定义24*4=96个字节单元 Z EQU 1234H ;用EQU定义的Z不占内存单元 所以W EQU 122,即$-X=26+96=122
荣成市15548468234: 汇编语言的一道题!急!!?
蔡水格来: 1.AL=24H 2.DX=1234H 3.DX=1224H,DL数据和$($ACSII码)字符交换. 4.BX为B的偏移地址 5.CX=4DH(字母M的ASCII码) 6.BX为D的偏移地址 7.AX=1200H,DS=459AH;前两个字节送AX,后两个送DS 8.AX=1200H,ES=0000;前两个字节送AX,后两个送ES DD指令数据存储(低地址到高地址共4字节空间)0012,0000,9A45,0000
荣成市15548468234: 一道汇编语言的题 BUFFER DB 1,2,4,8,16 VAR1 DW 1 VAR2 DD?
蔡水格来: 值应该是5,var1的地址减去buffer的地址.
荣成市15548468234: 汇编语言的一道基础题目求解 - ?
蔡水格来: 12345678910111213141516171819202122232425262728293031323334353637 DA1 DB '01234' DA2 DB 5 DUP(0) MOV SI,0 MOV CX,5 LOP:;Loop 1, si = 0 MOV AL,DA1[SI] ; al <-'0', (al) = 30H ADD AL,11H ; (al) = 41H OR AL,01H ; (al) = 41...
荣成市15548468234: 求解一个汇编语言程序题?
蔡水格来: int result = 0;for(int i = 1;i<=100;i++){ System.out.println(i*(i+1)); result += i*(i+1); } System.out.println(result);
荣成市15548468234: 解答一道汇编语言题!!?
蔡水格来: TABLE DW 10,20,30,40,50 ENTRY DW 3 . . MOV BX,OFFSET TABLE;把TABLE的地址给bx ADD BX,ENTRY ;bx+=3,bx = lea [table+3] MOV AX,[BX] ;ax=bx=[table+3]= little endian以字节为单位反向存储,所以: 10 = 0a 00 20 = 14 00 30 = 1e 00 所以存在内存里 10,20,30的形式依次是 0a 00 14 00 1e 00 table+3 = 00 1e = 1e00h 所以最后ax = 1e00h = 7680
荣成市15548468234: 单片机高手帮忙哈(汇编语言),帮忙解释下下面每一步程序的含义,就是注释下每一步,越详细越好,谢谢! - ?
蔡水格来: ORG 000H ;00h复位入口 AJMP MAIN ;跳到MAIN ORG 000BH ;定时器0中断入口 LJMP PT0J ;跳到PT0J ORG 0100H ;MAIN主程序入口 MAIN: MOV TMOD,#05H ;模式寄存器配置定时器0为16位计数器,p3.4为计数器脉冲输入 MOV TH0,#0...