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

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

2011-11-11 13:01
6251
娱乐娱乐,这是纯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冬季班]《安卓高级研修班(网课)》月薪三万班招生中~

上传的附件:
收藏
点赞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,宏汇编。
游客
登录 | 注册 方可回帖
返回