汇编语言的模块化程序设计(1004)

时间:2021-04-19 22:24:34

本文为《汇编语言程序设计》1004小节例程。点击链接…进课程主页。

模块化程序结构

assume cs:code
code segment
main: ...
call sub1 ;调用子程序sub1
...
mov ax, 4c00h
int 21h

sub1: ... ;子程序sub1开始
call sub2 ;调用子程序sub1
...
ret ;子程序返回

sub2: ... ;子程序sub2开始
...
ret ;子程序返回
code ends
end main

用寄存器来存储参数和结果

;计算data段中第一组数据的 3 次方,结果保存在后面一组dword单元中。
assume cs:code
data segment
dw 1,2,3,4,5,6,7,8
dd 0,0,0,0,0,0,0,0
data ends

code segment

start:mov ax,data
mov ds,ax
mov si,0 ;ds:si指向第一组word单元
mov di,16 ;ds:di指向第二组dword单元

mov cx,8
s:mov bx,[si]
call cube
mov [di],ax
mov [di].2,dx
add si,2 ;ds:si指向下一个word单元
add di,4 ;ds:di指向下一个dword单元
loop s

mov ax,4c00h
int 21h
cube:mov ax,bx
mul bx
mul bx
ret
code ends
end start

用内存单元批量传递数据

;将data段中的字符串转化为大写
assume cs:code
data segment
db 'conversation'
data ends

code segment
start: mov ax,data
mov ds,ax
mov si,0
mov cx,12
call capital
mov ax,4c00h
int 21h
capital: and byte ptr [si],11011111b
inc si
loop capital
ret
code ends
end start

用栈传递参数

;设 a = 3 、b = 1 ,计算:( a – b ) ^ 3
assume cs:code
code segment
start: mov ax , 1
push ax
mov ax , 3
push ax ;注意参数压栈的顺序
call difcube
mov ax,4c00h
int 21h
difcube : push bp
mov bp , sp
mov ax , [ bp + 4 ] ; 将栈中a的值送入ax 中
sub ax , [ bp + 6 ] ; 减栈中b的值
mov bp , ax
mul bp
mul bp
pop bp
ret 4
code ends
end start