汇编笔记7

第十章 call和ret指令

call 指令执行的时候,先把call指令后的第一个字节的IPCS和IP压栈,然后跳转到需要跳转的地方执行命令,类似调用函数

ret(或retf) 指令,用栈的数据修改IP(近转移)或CS和IP(远转移),达到跳转的目的,通常配合call指令完成类似调用函数然后返回的作用

call和ret指令的用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
call 标号   ;相当于进行  push ip
; jump near ptr 标号

call far ptr 标号 ;相当于进行 push cs
; push ip
; jum far ptr 标号

call 16位reg

call word ptr 内存单元地址 ;只改ip
call dword ptr 内存单元地址 ;;高地址处为cs,低地址为ip

; ; ; ; ; ; ; ; ; ; ; ;

ret ;相当于 pop ip
retf ;相当于 pop ip
; pop cs

乘法指令 mul

相乘的两个数,要么都是8位,要么都是16位

都是8位

一个相乘的数默认放在al,另一个放在8位的reg或内存字节单元中
结果默认放在ax

都是16位

一个相乘的数默认放在ax,另一个放在16位的reg或内存字节单元中
结果:结果的高位默认存在dx,低位默认存在ax

对于call和ret配合设计的函数调用

为防止寄存器使用上的冲突,一般在call进去的时候将要用的寄存器压栈,使用完后在ret前出栈

当寄存器不够用来传参或返回结果时,可以用内存单元或栈空间来代替

Comments