首页
论坛
课程
招聘
[原创]汇编小练习之一大数加法
2011-11-11 13:01 6252

[原创]汇编小练习之一大数加法

2011-11-11 13:01
6252
娱乐娱乐,这是纯asm版本,很基础的东西。
几个函数的实现memset
memset proc src:DWORD,char:BYTE,sze:DWORD
    push ebx
    push ecx
    push edx
    mov ecx,[ebp+16]
    mov bl,[ebp+12]
    mov edx,[ebp+8]
@loop:
    mov [edx],bl
    inc edx
    loop @loop
    pop edx
    pop ecx
    pop ebx
    ret 
memset endp

memcpy
memcpy proc dst:BYTE,src:BYTE
    push eax
    push ebx
    push edx
    push esi
    mov eax,[ebp+8]
    mov ebx,[ebp+12]
    mov esi,ebx
@Zero:
    mov dl,[esi]
    cmp dl,0h
    je @loop
    xor dl,dl
    mov [esi],dl
    inc esi
    jmp @Zero
@loop:
    mov dl,[ebx]
    cmp dl,30h
    jl  Exit
    cmp dl,39h
    jg  Exit
    mov [eax],dl
    inc ebx
    inc eax
    jmp @loop
Exit:
    pop esi
    pop edx
    pop ebx
    pop eax
    ret 
memcpy endp

memlen
memlen proc src:DWORD
    push ecx
    push ebx
    xor ecx,ecx
    mov eax,[ebp+8]
@loop:
    mov bl,[eax]
    cmp bl,13
    je Exit
    inc eax
    inc ecx
    jmp @loop
Exit:
    mov eax,ecx
    pop ebx
    pop ecx
    ret 
memlen endp

adding
adding proc dst:DWORD,src:DWORD
    sub esp,272
    push 272
    push 0
    push esp
    call memset
    mov eax,[ebp+8]
    push eax
    call memlen
    dec eax
    mov [esp],eax
    mov eax,[ebp+12]
    push eax
    call memlen
    dec eax
    mov [esp+4],eax
    xor edx,edx
    mov edi,[ebp+8]
    mov esi,[ebp+12]
@l1:
    xor ebx,ebx
    cmp [esp],ebx
    jl @l2
    cmp [esp+4],ebx
    jl @l2
    mov eax,[esp]
    mov ecx,[esp+4]
    mov bl,[edi+eax]
    add bl,[esi+ecx]
    sub bl,60h
    mov [esp+8+edx],ebx
    add edx,4
    mov eax,[esp]
    dec eax
    mov [esp],eax
    mov eax,[esp+4]
    dec eax
    mov [esp+4],eax
    jmp @l1
@l2:
    mov eax,[esp]
    jl @l3
    mov ebx,[edi+eax]
    sub ebx,30h
    mov [esp+8+edx],ebx
    dec eax
    mov [esp],eax
    jmp @l2
@l3:
    mov eax,[esp+4]
    jl @tp
    mov ebx,[esi+eax]
    sub ebx,30h
    mov [esp+8+edx],ebx
    dec eax
    mov [esp+4],eax
    jmp @l3
@tp:
    xor ebx,ebx
@l4:
    cmp ebx,edx
    jge @l5
    mov eax,[esp+8+ebx]
    push edx
    cdq
    push ebx
    mov ebx,10
    idiv ebx
    pop ebx
    pop edx
    add [esp+8+ebx+4],eax
    mov eax,[esp+8+ebx]
    push edx
    cdq
    push ebx
    mov ebx,10
    idiv ebx
    pop ebx
    mov [esp+8+ebx+4],edx
    pop edx
    add ebx,4
    jmp @l4
@l5:
    mov eax,[esp+8+edx]
    test eax,eax
    jne @tp1
    sub edx,4
@tp1:
    xor ebx,ebx
@l6:
    test edx,edx
    jl @Exit
    add [esp+8+edx],30h
    mov eax,[esp+8+edx]
    mov [edi+ebx],al
    add ebx,1
    sub edx,4
    jmp @l6
@Exit:
    add esp,272
    ret
adding endp

调用:
.386
.model flat, stdcall
option casemap :none

include windows.inc
include user32.inc
include kernel32.inc
include masm32.inc
include gdi32.inc

includelib gdi32.lib
includelib user32.lib
includelib kernel32.lib
includelib masm32.lib
include macro.asm
.data
	lpMsg		db "请输入大数:",0
	lpMsg1   db "大数的结果:",0
	
.data?
	buffer	db MAX_PATH dup(?)
	
.CODE
START:
	
	invoke locate,2,2			;设定输出文本的坐标
	invoke StdOut,offset lpMsg
	invoke StdIn,addr buffer,sizeof buffer
	push offset buffer
	push offset buffer
	call adding
	invoke locate,2,4
	invOke StdOut,offset lpMsg1
	invoke StdOut,offset buffer
	invoke StdIn,addr buffer,sizeof buffer
	invoke ExitProcess,0



看雪2022 KCTF 秋季赛 防守篇规则,征题截止日期11月12日!(iPhone 14等你拿!)

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (6)
雪    币: 1898
活跃值: 活跃值 (534)
能力值: ( LV13,RANK:420 )
在线值:
发帖
回帖
粉丝
demoscene 活跃值 7 2011-11-11 13:12
2
0
.data .code 算什么纯汇编 自己 data segment code segment
invoke 算什么纯汇编,自己push call。
StdIn stdOut算什么纯汇编 自己 GetStdHanlde ReadFile WriteFile
雪    币: 49
活跃值: 活跃值 (19)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
邓韬 活跃值 9 2011-11-11 13:37
3
0
MasmPlus自带的模版
雪    币: 49
活跃值: 活跃值 (19)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
邓韬 活跃值 9 2011-11-11 13:42
4
0
哎,自己放火烧自己的房子
雪    币: 39
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dahaione 活跃值 2011-11-11 17:48
5
0
支持下~
雪    币: 1481
活跃值: 活跃值 (155)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
cntrump 活跃值 13 2011-11-11 18:41
6
0
invoke 叫宏汇编。
雪    币: 80
活跃值: 活跃值 (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
iforgiven 活跃值 2011-11-12 21:49
7
0
这就叫汇编,叫masm,宏汇编。
游客
登录 | 注册 方可回帖
返回