⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 5-19.asm

📁 用地址表传递参数的形式
💻 ASM
字号:
data    segment
        org 0000
 ary0   dw $,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$
	dw $,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$
	dw $,$,$,$,$,$,$,$,$,$
	dw $
 count0 dw  ($-ary0)/2
 ary    dw 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
        dw 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36
	    dw 37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52
	    dw 53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68
	    dw 69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84
	    dw 85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100
 count   dw  ($-ary)/2
 sum     dw  ?
 table   dw  3 dup(?)
data    ends

stack   segment para stack 'stack'
        dw  100h dup(?)
stack   ends

code    segment
main    proc  far
    assume cs:code,ds:data,ss:stack
start:  push ds
      xor  ax,ax
      push  ax
      mov  ax,data
      mov  ds,ax
  ;建立地址表table
	mov  table,offset ary        ;存放数组起始地址  
	mov  table+2,offset count    ;存放数组的元素个数地址
	mov  table+4,offset sum      ;存放存和的单元地址
	mov  bx,offset table     ;bx指向表的起始地址
	call  PROADD
	mov  di,[bx+4]           ;取存放和的单元地址
	call  bin_dec
	call  near ptr crlf
	ret
main    endp

;入口参数:(bx)=表table首地址,(bx+2)=数组元素个数地址
;         (bx+4)=存放和的单元地址
;出口参数,累加和放入存储单元(bx+4)中返回
proadd  proc near
   push  ax
   push  cx
   push  di
   push  si
	mov  si,[bx]         ;取表首址即数组首地址
	mov  di,[bx+2]       ;取数组的元素个数地址
	mov  cx,[di]         ;取数组元素个数
	mov  di,[bx+4]       ;取存放和的单元地址
   	xor  ax,ax
next: add  ax,[si]
      inc  si
      inc  si
      loop  next
      mov  [di],ax
      pop  si
      pop  di
      pop  cx
      pop  ax
      ret
proadd  endp

;入口参数:存和单元地址放入di
;出口,用十进制形式显示出来
bin_dec proc near
      mov  ax,[di]      ;取待转换的和
      mov  cx,10000
      call  divdisp      ;调用除法及显示程序
      mov  ax,dx       ;余数送累加器,为下步再除
      mov  cx,1000
      call  divdisp
      mov  ax,dx
      mov  cx,100
      call  divdisp
      mov  ax,dx
      mov  cx,10
      call  divdisp
      mov  ax,dx
      mov  cx,1
      call  divdisp
       ret
bin_dec endp

divdisp proc near
     cwd           ;将累加器中的字扩展为双字DX,AX
     div  cx 
     push  dx        ;保存余数
     add  al,30h       ;将商的数字转换为ASCII码再显示
     mov  dl,al
     mov  ah,2
     int  21h
     pop  dx         ;恢复余数
     ret
divdisp endp

crlf    proc near
   	mov  dl,13
	mov  ah,2
	int  21h
   	mov  dl,10
	mov  ah,2
	int  21h
	ret
crlf    endp

code    ends
     end start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -