汇编-函数定义

函数定义:

TITLE Add and Subtract


; This program adds and subtracts 32-bit integers.
; Last update: 06/01/2006

.386
.model flat, stdcall
.stack 4096

INCLUDE Irvine32.inc
TAB = 9

.code
Rand1 PROC
    mov ecx, 2
L1:
    call Random32
    call WriteDec
    mov al, TAB
    call WriteChar
    loop L1
    ret  ;必须有ret
Rand1 ENDP

Rand2 PROC
    mov ecx, 2
L1:
    mov eax, 100
    call RandomRange
    sub eax, 50
    call WriteInt
    mov al, TAB
    call WriteChar
    loop L1
    
Rand2 ENDP
main PROC
    call Randomize
    call Rand1
    call Rand2
    INVOKE ExitProcess, 0
main ENDP


END main


USES操作符:

.code
main PROC
    mov eax, 10h
    call fun1

    INVOKE ExitProcess, 0
main ENDP

fun1 PROC USES eax ebx
    call DumpRegs
    ret
fun1 ENDP

在生成的PE文件中,fun1的开头有push eax push ebx 结尾有pop ebx  pop eax


3个输入整数的相加

TITLE Add and Subtract

; This program adds and subtracts 32-bit integers.
; Last update: 06/01/2006

.386
.model flat, stdcall
.stack 4096

INCLUDE Irvine32.inc
TAB = 9
.data
aName BYTE "Lincoln",0
nameSize = ($-aName) - 1
INTEGER_COUNT = 3
str1 BYTE "enter a :", 0
str2 BYTE "The sum is:", 0
array DWORD INTEGER_COUNT DUP(?)

.code
main PROC
    call Clrscr
    mov esi, OFFSET array
    mov ecx, INTEGER_COUNT
    call PromptForIntegers
    call ArraySum
    call DisplaySum
    INVOKE ExitProcess, 0
main ENDP

PromptForIntegers PROC USES ecx edx esi
    mov edx, OFFSET str1
    L1:
    call WriteString
    call ReadInt
    call Crlf
    mov [esi], eax
    add esi, TYPE DWORD
    loop L1
    ret
PromptForIntegers ENDP

ArraySum PROC USES esi ecx
    mov eax, 0
    L1:
    add eax, [esi]
    add esi, TYPE DWORD
    loop L1
    ret
ArraySum ENDP

DisplaySum PROC USES edx
    mov edx, OFFSET str2
    call WriteString
    call WriteInt
    call Crlf
    ret
DisplaySum ENDP
END main



TITLE Add and Subtract

; This program adds and subtracts 32-bit integers.
; Last update: 06/01/2006

.386
.model flat, stdcall
.stack 4096

INCLUDE Irvine32.inc


.data
data1 dword 10h
data2 dword 20h

.code
addTwo PROC USES ebx ecx,
    pval1:DWORD,
    pval2:DWORD
        LOCAL pval3:DWORD
    mov pval3, 12h
    mov eax, pval1
    add eax, pval2
    add eax, pval3
    ret
addTwo ENDP

main PROC
    push data1
    push data2
    call addTwo
    call WriteDec
    push 0
    call ExitProcess
main ENDP
END main


先设置本地参数,后push 需要保存的寄存器,访问局部变量的时候,同样是用ebp作为基址寄存器


local 定义数组

LOCAL pt[10]:BYTE


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值