当前位置:三九宝宝网 → 宝宝教育 → 教学论文 → 正文

汇编语言子程序调用

更新:01-06 整理:39baobao.com
字体:

[汇编语言如何入门]我也是0基础学编程 入门用王爽老师的《汇编语言》这本书,通俗易懂,如果不是遇到这本书, 可能我早就放弃学编程了,学完这个看谭浩强的《C语言程序设计》, 只看前几章就行,为WIN32汇...+阅读

简单点说,call指令在跳转前保存当前指令地址,而jmp一类的指令不保存当前指令的地址。 详细点说: call指令在跳转前会在栈中保存当前的程序计数器(IP)的值(有必要的话还要保存CS),保存完IP的值后,再去执行跳转指令。即相当于: push CS (没有这种指令,有没有这一句还要看调用的类型:far/near) push IP (没有这种指令) jmp [word ptr/dword ptr] ... 这样,程序在执行ret/retf指令时就能从栈中取出IP的值,即相当于: pop IP (没有这种指令) pop CS (没有这种指令,有没有这一句也要看调用的类型) 来继续执行call指令后的其他指令,当然你也可以选择不执行ret,而把call当做jmp来用。

这样也没有问题(没人这么干),只不过栈里多了点东西罢了,记得处理就好。 而形如jmp一类的指令只是简单的执行跳转(修改IP的值),并不保存IP的值。当然跳转后程序也就不知道原来是从哪里跳转到这里来的,自然就无法返回。 当然,这个时候ret指令还是可以用的,因为ret指令只是简单的从栈顶取出一个word然后赋给IP,所以也可以用ret指令来实现jmp的功能(也没人这么干)。

如: mov bx,offset s push bx ret 这样就相当于: jmp s 所以说不要只是记一...简单点说,call指令在跳转前保存当前指令地址,而jmp一类的指令不保存当前指令的地址。 详细点说: call指令在跳转前会在栈中保存当前的程序计数器(IP)的值(有必要的话还要保存CS),保存完IP的值后,再去执行跳转指令。即相当于: push CS (没有这种指令,有没有这一句还要看调用的类型:far/near) push IP (没有这种指令) jmp [word ptr/dword ptr] ... 这样,程序在执行ret/retf指令时就能从栈中取出IP的值,即相当于: pop IP (没有这种指令) pop CS (没有这种指令,有没有这一句也要看调用的类型) 来继续执行call指令后的其他指令,当然你也可以选择不执行ret,而把call当做jmp来用。

这样也没有问题(没人这么干),只不过栈里多了点东西罢了,记得处理就好。 而形如jmp一类的指令只是简单的执行跳转(修改IP的值),并不保存IP的值。当然跳转后程序也就不知道原来是从哪里跳转到这里来的,自然就无法返回。 当然,这个时候ret指令还是可以用的,因为ret指令只是简单的从栈顶取出一个word然后赋给IP,所以也可以用ret指令来实现jmp的功能(也没人这么干)。

如: mov bx,offset s push bx ret 这样就相当于: jmp s 所以说不要只是记一个指令怎么用,而是要理解一个指令到底是什么原理。

本文地址:https://www.39baobao.com/show/29_23594.html

以上内容来自互联网,请自行判断内容的正确性。若本站收录的信息无意侵犯了贵司版权,请联系我们,我们会及时处理和回复,谢谢.

以下为关联文档:

汇编语言如何学习本人虽然汇编不是学得很好,也不想往硬件发展,但一些基本的语法知识还是知道一些的,希望能帮到你。 1、凡是程序设计的东西,必定要上机操作,验证语法的工作原理,比如:SAR AX,01H和SH...

汇编语言实现感觉有点别别翘的意思。 ;y1=x1*a1+x2*a2+x3*a3+x4*a4+x5*a5 ;结果正确。 data segment x1 db 2 a1 db 7 x2 db 3 a2 db 9 x3 db 4 a3 db 2 x4 db 5 a4 db 3 x5 db 6 a5 db 8...

汇编语言编程实现以下功能1.mov cl,2 shl ax,cl 2.sub ax,bx 3.and ax,cx 4.xchg bx,ax 5.mov al,9 add al,8 sub al,7 mov x,al 6.code segment assume cs:code start:mov ah,1 int 21h sub al,20h...

汇编语言程序实现一下C效果mov ax, m mov dx, n cmp ax, dx je label1 jl label2 sub ax, dx jmp label1 label2: sub dx, ax label2: label1: 有点小错误,修改了 mov ax, m mov dx, n cmp ax, dx je l...

汇编语言实现小数的计算单片机好像没有浮点数的计算指令吧? 我想到一个不太好的方法,你凑合一下吧 V0应该是整数吧? 这样现将V0乘上10,再减去4,然再在乘上100000,最后除以19530 这样就全部转化成整数的运...

汇编语言编写一个程序DATA SEGMENT; CR db 0dh,0ah,'$' SSP db 20h,'$' string1 db 'plese input the number:$' string2 db 'the number is(H):$' string3 db 'the number is(B):$' data1 dw 0...

汇编语言实现以下输出; eg0000.asm in Windows Console include io32.inc .data in_msg4 byte '请选择0-3并按回车确定:',0 in_msg0 byte '您选择的频率为f0,谢谢!',0 in_msg1 byte '您选择的频率为f1...

怎么做啊?!二编程题 1用汇编语言编写程序编程实现以下功stud struc name db ' ' eng db ?math db ?comp db ?phy db ?sum dw ?aver db ?stud ends code segment assume cs:code org 100h start:jmp bbb studs studstudstudstudbbb...

C语言中如何调用子程序C语言中,子程序是通过函数来实现的,一个函数相当于一个有独立功能的子程序子程序意在体现着main函数的作用。 函数机制的实现通常需要经过设计、声明和调用来完成的。 所有的...