[笔记][汇编语言 基于x86处理器]过程

相关指令集总结
编号命令示例解释备注
1pushpush reg/mem16
push reg/mem32
push imm32
push指令首先减少esp的值,再将源操作数复制到堆栈。-
2poppop reg/mem16
pop reg/mem32
pop指令首先把esp指向的堆栈元素内容复制到一个16位或32位目的操作数中,在增加esp的值。-
3pushfd / popfdpushfd
popfd
pushfd指令吧32位EFLAGS寄存器内容压入堆栈,而popfd指令则把堆顶单元内容弹出到eflags寄存器。-
4call/retcall destination / retcall指令调用一个过程,指挥处理器从新的内存地址开始执行。过程使用ret指令将处理器转回到该过程被调用的程序点上。-
相关代码示例
  1. 字符串反转
.data
aName BYTE "Abraham Lincoln", 0
nameSize = ($ - aName) - 1

.code
main PROC
;
	mov ecx, nameSize
	mov esi, 0
L1:
	movzx eax, aName[esi]
	push eax
	inc esi
	loop L1
	mov ecx, nameSize
	mov esi, 0
L2:
	pop eax
	mov aName[esi], al
	inc esi
	loop L2
	INVOKE ExitProcess, 0
main ENDP
END main
  1. 整数求和
;-----------------------------------------------
; sumOf
;
; 计算3个32位整数之和并返回和数。
; 接收: EAX,EBX和ECX为3个整数,可能是有符号数,也可能是无符号数。
; 返回: EAX=和数
;-----------------------------------------------
sumOf PROC
	add eax, ebx
	add eax, ecx
	ret
sumOf ENDP
相关知识点总结
  1. proc伪指令
    • 定义过程:过程可以非正式定义为,由返回语句结束的已命名的语句块。过程中用PROC和ENDP伪指令来定义,并且必须为其分配一个名字(有效标识符)
    • 当在程序启动过程之外创建一个过程时,就用RET指令来结束它。
    • 默认情况下,标号只在其定义的过程中可见。如果不这么做,可使用全局标号,即在名字后面加双冒号。
  2. 过程说明
    • 对过程实现的所有任务的描述
    • 输入参数以及用法的列表,并将其命名为Receives(接受)。如果输入参数对其数值有特殊要求,也要在这里列出来。
    • 对过程返回的所有数值的描述,并将其命名为Returns(返回)。
    • 所有特殊要求的列表,这些要求被称为先决条件,必须在过程被调用之前满足。列表命名为Requires。
  3. 向过程传递寄存器参数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值