|
主题 : : 新手、调试N久才弄出来的。 [待解决] |
回复[ 5次 ]
点击[ 631次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2013-02-25 21:24 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-07-01 22:53 |
assume cs:code,ds:data,ss:table
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'
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5973000
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
data ends
table segment
db 21 dup('year summ ne ?? ')
table ends
code segment
start: mov ax,data
mov ds,ax
mov ax,table
mov es,ax
mov bx,0
mov si,0
mov cx,21
years: mov dx,cx
mov cx,4
mov di,0
yearss: mov al,[si]
mov es:[bx+di],al
inc si
inc di
loop yearss
add bx,16
mov cx,dx
loop years
mov bx,0
mov si,0
mov cx,21
gz: mov dx,cx
mov cx,4
mov di,0
gzs: mov al,[si+84]
mov es:[bx+di+5],al
inc si
inc di
loop gzs
mov cx,dx
add bx,16
loop gz
mov bx,0
mov si,0
mov cx,21
s: mov ax,[bx+168]
mov es:[si+10],ax
add bx,2
add si,16
loop s
mov si,0
mov di,0
mov cx,21
mov ax,es
mov ss,ax
sq: mov dx,[si+86]
mov ax,[si+84]
mov bx,[di+168]
div bx
mov [bp+13],ax
add si,4
add di,2
add bp,16
loop sq
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第1楼]
[ 回复时间:2013-05-10 02:36 ]
[引用]
[回复]
[ top ] | |
荣誉值:424
信誉值:0
注册日期:2013-04-08 10:06 |
太复杂了-.- .看我的吧 刚学用2个钟写完的
assume cs:codesg
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983' ;1个年份占4字节
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995';以上表示21年的21个字符串 ;data:53 84个字节
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 ;1个数据占4字节
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
;以上表示21年公司总收入的21个dword型数据 ;data:A7 ;21*4(84)+84=168个字节单元
dw 3, 7, 9, 13, 28, 38, 130, 220, 476, 778, 1001, 1442, 2258, 2793, 4037, 5635, 8226
dw 11542, 14430, 15257, 17800 ;1个数据占2个字节
;以上表示21年公司雇员人数的21个word型数据 ;data:D1 ;168+21*2(42)=210个字节单元
data ends
table segment
db 21 dup ('year summ ne??')
table ends
codesg segment
start: mov ax,data
mov ds,ax
mov ax,table
mov es,ax
mov bx,0
mov si,0
mov di,0
mov cx,21
s:
mov ax,[si]
mov es:[bx],ax
mov ax,[si].2
mov es:[bx].2,ax
mov ax,[si].84
mov es:[bx].5,ax
mov ax,[si].86
mov es:[bx].7,ax
mov ax,[di].168
mov es:[bx].0AH,ax
mov ax,es:[bx].5
mov dx,es:[bx].7
div word ptr [di].168
mov es:[bx].0DH,ax
add bx,10H
add di,2
add si,4
loop s
mov bx,0
mov cx,21
s0: mov byte ptr [bx].5,20H ;空格 或 mov al,20H mov [bx].4,al
mov byte ptr [bx].10,20H ;必须放在s循环条件后,不然将覆盖dd-dw定义的数据
mov byte ptr [bx].13,20H
mov byte ptr [bx].16,20H
add bx,10h
loop s0
mov ax,4c00h
int 21h
codesg ends
end start | | |
|
|
|
|
[第2楼]
[ 回复时间:2013-06-08 18:23 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2013-03-13 00:10 |
assume cs:codesg
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984'
db '1985','1986','1987','1988','1989','1990','1991','1992','1993','1994'
db '1995'
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803430,118300,1843000,274900,3753000,4649000,5937000
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,3037,5635,8226
dw 11542,14430,15257,17800
data ends
table segment
db 21 dup ('year summ ne ?? ')
table ends
codesg segment
start: mov ax,data
mov ds,ax
mov ax,table
mov es,ax
mov bx,0
mov si,0
mov di,0
mov bp,0
mov cx,21
s: mov ax,[bx+si]
mov es:[bp],ax
mov dx,[bx+si+2]
mov es:[bp+2],dx
add bx,84
mov ax,[bx+si]
mov dx,[bx+si+2]
mov es:[bp+5],ax
mov es:[bp+7],dx
add bx,84
div word ptr ds:[bx+di]
mov dx,ds:[bx+di]
mov es:[bp+10],dx
mov es:[bp+13],ax
mov bx,0
add bp,16
add si,4
add di,2
loop s
mov ax,4c00h
int 21h
codesg ends
end start
仅一个 循环就可以完成 | | |
|
|
|
|
[第3楼]
[ 回复时间:2014-03-06 17:04 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2013-10-22 15:27 |
|
|
|
|
|
[第4楼]
[ 回复时间:2014-09-02 17:25 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2014-08-29 19:48 |
我的这个测试通过了,但是就最后三轮循环被除数写入不正确,也不知道什么原因,求高手解答!(我怎么想都想不通,前18次循环都正常):
assume cs:code,ds:data,es:table,ss:stack
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'
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5973000
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
data ends
table segment
db 21 dup('year summ ne ?? ')
table ends
stack segment
dw 16 dup (0)
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,32
mov word ptr ss:[0],0 ;存放年份偏移地址
mov word ptr ss:[2],84
mov word ptr ss:[4],168
mov ax,data
mov ds,ax
mov ax,table
mov es,ax
mov bx,0
mov cx,21 ;外循环21次
mov dx,0
s0: push cx ;外循环计数器暂存到栈
mov si,ss:[0]
mov di,0
mov cx,4 ;内循环4次
s: mov al,[si]
mov es:[bx+di],al
inc si
inc di
loop s
mov ss:[0],si
mov si,ss:[2]
inc di
mov ax,[si]
mov es:[bx+di],ax
add si,2
add di,2
mov dx,[si]
mov es:[bx+di],dx
add si,2
mov ss:[2],si
mov si,ss:[4]
add di,3
mov cx,[si]
mov es:[bx+di],cx
div cx
add si,2
mov ss:[4],si
add di,3
mov es:[bx+di],ax
add bx,16
pop cx
loop s0
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第5楼]
[ 回复时间:2014-09-03 04:23 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:0
注册日期:2014-08-02 21:25 |
用你的程序后三轮执行结果:
被除数位置 除数 商
1409:0200 31 39 39 33 20 28 44 39-00 20 5E 38 20 04 01 20 1993 (D9. ^8 ..
1409:0210 31 39 39 34 20 28 F0 46-00 20 99 3B 20 30 01 20 1994 (.F. .; 0.
1409:0220 31 39 39 35 20 08 24 5B-00 20 88 45 20 4F 01 20 1995 .$[. .E O.
00394428H = 3753000
0046F028H = 4649000
005B2408H = 5973000
在我这边用你的程序结果都对。
有瑕疵的地方是程序di没有赋初值,给dx赋初值0有点多余,但这都不影响程序执行结果。 | | |
|