汇编语言的模块化程序设计(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迂者-贺利坚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值