. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  我的课程设计1,希望给没思路的以思路,同时希望得到高手指点。  [待解决] 回复[ 4次 ]   点击[ 458次 ]  
zwz_good
[帖 主]   [ 发表时间:2009-10-05 22:20 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-03-18 14:35
assume cs:code 

data segment   
  db '1975','1976','1977','1978','1979','1980','1981','1982','1983'   
  db '1984','1985','1986','1987','1988','1989','1990','1991','1992'   
  db '1993','1994','1995'   
  ;以上表示21年的21个字符串 4个字节 21*4  

  dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514   
  dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000   
  ;以上表示21年公司总收入的21个dword型数据 21*4  

  dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226   
  dw 11542,14430,15257,17800   
  ;以上表示21年公司雇员人数的21个word型数据 21*2  
data ends   
      
table segment   
  db 21 dup ('year summ ne ?? ')   
table ends     

stack segment 
  dw 32 dup (0) 
stack ends 

code segment 
start: 
  mov ax, data 
  mov ds, ax 
  mov ax, stack 
  mov ss, ax 
  mov sp, 40h 
  mov ax, table 
  mov es, ax 
  ;填充table表 
  mov si, 0 
  mov di, 0 
  mov bx, 0 
  mov bp, 0 
  mov cx, 21 
table0: 
  ;年份  
  mov ax, 0h[bx] 
  mov es:[bp].0h, ax 
  mov ax, 0h[bx+2] 
  mov es:[bp].2h, ax 
  ;收入 
  mov ax, 54h[bx] 
  mov es:[bp].5h, ax 
  mov ax, 54h[bx+2] 
  mov es:[bp].7h, ax    
  ;雇员数 
  mov ax, 0a8h[si] 
  mov es:[bp].0ah, ax 
  ;人均收入 
  mov ax, es:[bp].5h 
  mov dx, es:[bp].7h 
  div word ptr es:[bp].0ah 
  mov es:[bp].0dh, ax 

  add bx, 4 
  add si, 2 
  add bp, 10h 
  loop table0 

  ;显示table表 
  mov bp, 0 
  mov si, 0 
  mov dh, 4 
  mov dl, 1 
  mov cx, 21 
table1: 
  push cx 
  ;显示年份 
  mov ax, es:[bp].0h 
  mov [si].0h, ax 
  mov ax, es:[bp].2h 
  mov [si].2h, ax 
  mov byte ptr [si].4h, 0   
  mov cl, 2h 
  call show_str 

  ;显示收入 
  push dx 
  mov ax, es:[bp].5h 
  mov dx, es:[bp].7h 
  call dtoc 
  pop dx 
  mov dl, 11  
  call show_str 
  ;显示雇员数 
  push dx 
  mov ax, es:[bp].0ah 
  mov dx, 0 
  call dtoc 
  pop dx 
  mov dl, 21 
  call show_str 

  ;显示人均收入 
  push dx 
  mov ax, es:[bp].0dh 
  mov dx, 0 
  call dtoc 
  pop dx 
  mov dl, 31 
  call show_str 

  inc dh 
  mov dl, 1 
  add bp, 10h 

  pop cx 
  loop table1 

  mov ax, 4c00h 
  int 21h 
;名称:dtoc 数值显示 
;功能:将dword型数转变为表示十进制数的字符串,字符串以0为结尾符 
;参数:(ax)=dword型数据的低16位 
;     (dx)=dword型数据的高16位 
;     ds:si指向字符串首地址 
;返回:无 
dtoc: 
  push ax 
  push cx 
  push dx 
  push si 
  mov cx, 0h 
  push cx 
dtoc3: 
  mov cx, 0ah 
  call divdw 
  add cx, 30h 
  push cx ;余数入栈 
  ;判断商是否为零,即dx和ax都为零才行 
  mov cx, dx 
  jcxz dtoc1 
  jmp short dtoc3 
dtoc1: 
  mov cx, ax 
  jcxz dtoc2 
  jmp short dtoc3 
dtoc2: 
  pop cx 
  mov [si], cl 
  inc si 
  jcxz dtoc4 
  jmp short dtoc2 
dtoc4: 
  pop si 
  pop dx 
  pop cx 
  pop ax 
  ret 

;名称:divdw 防止除法溢出子程序 
;功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型, 
;     结果为dword型 
;参数:(ax)=dword型数据的低16位 
;     (dx)=dword型数据的高16位 
;     (cx)=除数 
;返回:(dx)=结果的高16位,(ax)=结果的低16位 
;     (cx)=余数 
divdw: 
  push bx 
  mov bx, ax 
  mov ax, dx 
  mov dx, 0h 
  div cx 
  push ax 
  mov ax, bx 
  div cx 
  mov cx, dx 
  pop dx 
  pop bx 
  ret 

;名称:show_str 显示字符串子程序 
;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串 
;参数:(dh)=行号(取值范围0-24),(dl)=列号(取值范围0-79) 
;     (cl)=颜色,ds:si指向字符串的首地址 
;返回:无 
show_str: 
  push ax 
  push bx 
  push cx 
  push dx 
  push si 
  push es 

  mov ax, 0b800h 
  mov es, ax 
  mov al, 0a0h 
  mul dh 
  mov bx, ax 
  mov al, 2h 
  mul dl 
  add bx, ax 
  mov dl, cl 
  mov cx, 0 
s: 
  mov cl, [si] 
  jcxz ok 
  mov es:[bx], cl 
  mov es:[bx+1], dl 
  add bx, 2 
  inc si 
  jmp short s 
ok: 
  pop es 
  pop si 
  pop dx 
  pop cx 
  pop bx 
  pop ax 
  ret 

code ends 
end start
yonglei0916
[第1楼]   [ 回复时间:2009-10-09 06:57 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-10-06 23:03
这个好像是第八章的实验七,发错地方了吧!
yonglei0916
[第2楼]   [ 回复时间:2009-10-09 06:58 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-10-06 23:03
不好意思,没看到下面!
zwz_good
[第3楼]   [ 回复时间:2009-10-12 21:02 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-03-18 14:35
可能是我的程序没有注释,搞得大家都不愿看,唉。
qingfeng203
[第4楼]   [ 回复时间:2009-11-16 01:05 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-10-18 00:34
写得很好  思路也好  利用了以前的程序  设计简单些  容易懂些  虽然程序是长了些
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved