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

本文为《汇编语言程序设计》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

你可能感兴趣的:(汇编语言)