我的汇编环境是DosBox
不同的平台,汇编的代码会有所不同。
函数调用:
assume cs:code,ds:data,ss:stack
data segment
data ends
stack segment
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,128
call s1 ;push ip
call s2
mov ax,4c00H
int 21H
s1: mov ax,1000H
ret
s2: mov ax,1001H
ret
code ends
end start
计算5+3的值:
assume cs:code,ds:data,ss:stack
data segment
data ends
stack segment
stack ends
code segment
start:
push bp
mov sp,bp
sub $32,sp
mov $5,20(sp)
mov $3,24(sp)
mov sps,ax
mov ax,4(sp)
mov 20(sp),ax
mov ax,(sp)
call plus
mov ax,28(sp)
mov $0,ax
leave
ret
mov ax,4c00H
int 21H
plus: sub $16,sp
mov 12(bp),ax
mov p,dx
add dx,ax
mov ax,-4(bp)
mov -4(bp),ax
leave
ret
code ends
end start
assume cs:code,ds:data,ss::stack
data segment
db '1975','1976','1977','1978','1975','1976','1977','1978'
db '1985','1986','1987','1988','1985','1986','1987','1988'
db '1995','1996','1997','1998','1999','2076','2077','2078'
dd 32,45,435,435,436,546,4756,7657,6765,7542,5622,5575,66558,78566,75456
dd 324545,4545,434545,43545,44536,55446,475456,764557,654765,75442,56522,55575,4366558,781566,7534456
dw 324545,4545,434545,43545,44536,55446,475456,764557,654765,75442,56522,55575,4366558,781566,7534456
dw 324545,4545,434545
data ends
table segment
db 21 dup('year summ ne ??')
table ends
string segment
db 10 dup('0'),0
string ends
stack segment stack
db 128 dup(0)
stack ends
code segment
start: mov ax,data
mov ds,ax
mov si,0
mov di,16
mov cx,8
cpystring: mov ax,ds:[si]
mov ds:[di],ax
add si,2
add di,2
loop cpystring
mov ax,4c00H
int 21H ;调用 INT 21H 的 4CH 号中断,该中断就是安全退出程序。
code ends
end start