|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
assume cs:codesg
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个字符(0-53h)
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,184300,2759000,3753000,4649000,5937000
;(54h-0a7h)
dw 3,7,9,13,20,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
;(0a8h-0d1h)
data ends
table segment
db 21 dup('year summ ne ?? ')
table ends
stack segment
dw 8 dup(0)
stack ends
codesg segment
start:mov ax,table
mov es,ax
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax ;把table stack data与寄存器挂钩
mov sp,16
mov bx,0
mov cx,21 ;设定外循环次数
s0: push cx
mov si,0
mov di,0 ;si di寄存器值0
mov cx,4
s: mov ax,ds:[bx+si]
mov es:[bx+0d2h+di],ax ;通过ax间接转移ds:[bx+si]中的数据.放入段地址es开始偏移地址[bx+0d2h+di]中
mov ax,ds:[bx+54h+si]
mov es:[bx+0deh+di],ax
inc si
inc di
add bx,2
loop s
add bx,16
pop cx ;取出cx值 避免死循环
loop s0
mov si,0
mov di,0
mov bx,0a8h
mov cx,21
s2: push cx
mov si,0
mov di,0
mov cx,2 ;因为ne对应的只有2字节数据。不能4次循环。重新设定循环次数。不知道我的理解对不对
s3: mov ax,ds:[bx+si]
mov es:[bx+16h+di],ax
inc si
inc di
add bx,2
loop s3
add bx,16
pop cx
loop s2
mov bx,0 ;重设bx为零 因为收入中前9个数据没有大于65536 分开来循环 然后放入??中 能不能放一起循环
;我还在思考 有个困惑在这里 debug中首先定义的
mov cx,9 ;数据怎么查不到 d ds:0完全看不到数据 输入d ds:120才能查询到数据 但我不确定这到底是定义起始
s4: mov ax,ds:[bx+54h] ;的数据 还是程序结束时的数据 狂纠结中
div byte ptr ds:[bx+0a8h]
mov es:[bx+di+0d2h],ax
add di,16
add bx,2
loop s4
mov bx,77h
mov cx,12
s5: mov ax,ds:[bx]
mov dx,ds:[bx+2]
div word ptr ds:[bx+26h]
mov es:[bx+di+0d2h],ax
add di,16
add bx,2
loop s5
mov ax,4c00h
int 21h
codesg ends
end start
|
|