第十五课
本帖最后由 wai1216 于 2016-5-25 22:42 编辑虽然最近跟着破解班学习了一些基础的破解,但也还在看C的食品
今天看到十五课了。校长边讲,然后讲怎么实现,先开始是跟着写。之后暂停视频,自己想怎么写
----------------
1。实现加法
assume cs:code,ds:data
data segment
dw 20h dup(0)
data ends
code segment
c dw 0
func_add:
mov ax,es:
mov cx,es:
add ax,cx
mov es:,ax
add bx,2
jmp es:
start:
mov ax,data
mov es,ax
xor bx,bx
mov si,offset func_r
mov es:,si
add bx,2
mov ax,10h
mov es:,ax
add bx,2
mov ax,20h
mov es:,ax
add bx,2
jmp func_add
func_r:
mov ax,4c00h
int 21h
code ends
end start
----------------
2。实现加法和减法
;00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19.....
; add 10 20 30 sub() 9 22E7 FF
; 30+FFE7
assume cs:code,ds:data
data segment
dw 20h dup(0)
data ends
code segment
c dw 0
func_add:
;int add()
mov ax,es:
mov cx,es:
add ax,cx
mov es:,ax
add bx,2
;sub(a - 7,b + 2)
mov si,offset sub_r
mov es:,si
;a-7
add bx,2
mov ax,es:
sub ax,7
mov es:,ax
;b+2
add bx,2
mov ax,es:
add ax,2
mov es:,ax
;int sub()
add bx,2
jmp func_sub
;sub_r/c += sub()
sub_r:
mov ax,es:
mov cx,es:
add ax,cx
mov es:,ax
add bx,2
sub bx,8
jmp es:
;return
func_sub:
;int sub()
mov ax,es:
mov cx,es:
sub ax,cx
mov es:,ax
add bx,2
jmp es:
main:
mov ax,data
mov es,ax
xor bx,bx
;add(10,20)
mov si,offset retn_main
mov es:,si
add bx,2
mov ax,10h
mov es:,ax
add bx,2
mov ax,20h
mov es:,ax
add bx,2
jmp func_add
retn_main:
;return_main
mov ax,4c00h
int 21h
code ends
end main
第二个版本:
assume cs:code,ds:data
data segment
dw 20h dup(0)
data ends
code segment
c dw 0
func_add:
mov ax,es:
mov cx,es:
add ax,cx
mov es:,ax
jmp func_sub
func_sub:
mov ax,es:
sub ax,7
mov cx,es:
add cx,2
sub ax,cx
mov dx,es:
add ax,bx
mov es:,ax
add bx,2
jmp es:
mov ax,es:
mov cx,es:
sub ax,cx
mov es:,ax
add bx,2
jmp es:
main:
mov ax,data
mov es,ax
xor bx,bx
mov si,offset end_main
mov es:,si
add bx,2
mov ax,10h
mov es:,ax
add bx,2
mov ax,20h
mov es:,ax
add bx,2
jmp func_add
end_main:
mov ax,4c00h
int 21h
code ends
end main
-----
最后按照自己对C的理解,返回一个地址
;00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19.....
; add 10 20 30 sub() 9 22E7 FF
; 30+FFE7
assume cs:code,ds:data
data segment
dw 20h dup(0)
data ends
code segment
c dw 0
func_add:
;int add()
mov ax,es:
mov cx,es:
add ax,cx
mov es:,ax
add bx,2
;sub(a - 7,b + 2)
mov si,offset sub_r
mov es:,si
;a-7
add bx,2
mov ax,es:
sub ax,7
mov es:,ax
;b+2
add bx,2
mov ax,es:
add ax,2
mov es:,ax
;int sub()
add bx,2
jmp func_sub
;sub_r/c += sub()
sub_r:
mov ax,es:
mov cx,es:
add ax,cx
mov es:,ax
add bx,2
sub bx,8
jmp es:
;return
func_sub:
;int sub()
mov ax,es:
mov cx,es:
sub ax,cx
mov es:,ax
add bx,2
jmp es:
main:
mov ax,data
mov es,ax
xor bx,bx
;add(10,20)
mov si,offset retn_main
mov es:,si
add bx,2
mov ax,10h
mov es:,ax
add bx,2
mov ax,20h
mov es:,ax
add bx,2
jmp func_add
retn_main:
;return_main
mov ax,4c00h
int 21h
code ends
end main
---------------
使用push
assume cs:code,ds:data
data segment
dw 20h dup(0)
data ends
code segment
c dw 0
func_add:
mov bp,sp
mov ax,ss:
mov cx,ss:
add ax,cx
mov ss:,ax
retn
main:
mov ax,data
mov ss,ax
mov sp,100h
mov dx,20
push dx
mov dx,10
push dx
call func_add
add sp,4
next:
mov ax,4c00h
int 21h
code ends
end main
页:
[1]