|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
没法上图,至少table初始化很成功,除法div也通过编译,结果也正确:
- assume cs:codesg,ss:stacksg
- stacksg segment
- dw 0,0,0,0,0,0,0,0
- stacksg ends
- datasg 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'
- ;年份(每一个元素占4个字节)
- dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,19514
- dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
- ;总收入(每一个元素占4个字节)
- dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
- dw 11542,14430,15257,17800
- ;雇员数(每一个元素占2个字节)
- ;而且都是紧挨着
- datasg ends
- table segment
- db 21 dup ('year sumn ne ?? ');长16个字节
- table ends
- codesg segment
- start:
- ;table初始化部分
- mov ax,stacksg
- mov ss,ax
- mov sp,16
- mov ax,datasg;此处定位到datasg的year的位置,与table 的year相隔00e0H
- mov ds,ax
- mov bx,00e0H;bx作为tablesg的指针
- mov di,0;di作为datasg指针
- mov si,0
- mov cx,21
- s:;这里其实可以不用嵌套循环但为了清晰指针跳动的过程于是就这样了
- push cx
- mov si,0
- mov cx,4
- s0:;遍历一行
- mov al,[di+0];year一个一个字节替换为年份
- mov [bx+0+si],al
- inc si
- inc di
- loop s0
- add bx,16;遍历完后跳到下一行
- pop cx
- loop s
-
-
- mov bx,00e0H;恢复table指针的位置到第一行第一位
- mov cx,21;其实完全可以与上一个循环合并但不会减少太多时间复杂度
- s1:
- push cx
- mov si,0
- mov cx,4
- s2:
- mov al,[di];sumn一个一个字节替换为收入
- mov [bx+5+si],al
- inc si
- inc di
- loop s2
- add bx,16
- pop cx
- loop s1
-
- mov bx,00e0H
- mov cx,21
- s3:
- mov si,0
- mov ax,[di];ne 一个一个字替换为雇员数
- mov [bx+10],ax
- add di,2
- add bx,16
-
- loop s3
-
-
- mov cx,21
- mov di,00e0H;这里将di替代bx作table指针作用
-
-
-
- s5:;除法部分
- mov bx,[di+10];将ne赋给bx做除数
- mov ax,[di+5];将sumn低位赋给ax作被除数
- mov dx,[di+7];将sumn高位赋给dx作被除数
- div bx;使用div 来用sumn/ne替换??
- mov [di+13],ax
- add di,16
-
- loop s5
- mov ax,4c00H
- int 21h
- codesg ends
- end start
复制代码 |
|