课程设计1 找错误。
本帖最后由 传说。 于 2014-5-28 22:27 编辑assume cs:code,ss:stack,ds:data
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, 197514
dd 345980,590827,803530,1183000,1843000,2795000,3753000,4649000,5937000
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
dw 5,3,42,104,85,210,123,111,105,125,140,136,153,211,199,209,224,239
dw 260,304,333
data ends
stack segment
db 80 dup (0)
stack ends
code segment
start: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,0
mov si,0 ;数据段偏移地址
mov di,0 ;显存段偏移地址
mov bl,2 ;颜色属性
mov ax,0b800h
mov es,ax
mov cx,21d
s: push cx
mov cx,4
s0: mov al,
mov es:,al
mov es:,bl
add di,2
inc si
loop s0
add di,98h
pop cx
loop s
mov cx,21
mov bx,0
mov di,0
mov sp,50h
s1: mov ds:,cx
mov ds:,di
mov dx, ;高16位入ax
mov ax, ;低16位入dx
ff: call divdw
ll: inc bx
mov cx,di
jcxz mm
ok1:push ax
push bx
mov ax,di
mov dx,ax
pop bx
pop ax
jmp short ff
mm: mov cx,ax
jcxz q
jmp short ok1
q: mov cx,bx
mov di,ds:
ok:
pop ax
mov bl,2
add al,30h
mov es:20,al
mov es:20,bl
add di,2
inc si
loop ok
add si,2
mov cx,ds:
add ds:,0a0h
loop s1
mov ax,4c00h
int 21h
divdw:
push cx
push bx
push ax ;保存低16位
mov ax,dx
mov dx,0 ;dx归零
mov bx,10d ;bx做除数
div bx ; ax/bxax为商 dx位余数
mov di,ax ;商入di
pop ax ;低16位出栈
mov cx,ax
jcxz k
div bx ;(低16位+商)/bx
K: pop bx
pop cx
push dx
jmp short ll
code ends
end start
谁能帮我这程序更改好?双字型数据出不来。
传说。 发表于 2014-5-29 14:54 static/image/common/back.gif
强行顶!按时打扫打扫打扫的
assume cs:code,ss:stack,ds:data
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,2795000,3753000,4649000,5937000
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
dw 5,3,42,104,85,210,123,111,105,125,140,136,153,211,199,209,224,239
dw 260,304,333
data ends
stack segment
db 80 dup (0)
stack ends
code segment
start: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,0
mov si,0 ;数据段偏移地址
mov di,0 ;显存段偏移地址
mov bl,2 ;颜色属性
mov ax,0b800h
mov es,ax
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;输出年份
mov cx,21d
s: push cx
mov cx,4
s0: mov al,
mov es:,al
mov es:,bl
add di,2
inc si
loop s0
add di,098h
pop cx
loop s
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;输出收入
mov cx,21
mov di,0
mov sp,50h
s1: mov bx,0
mov ds:,cx
mov ds:,di
ff: mov dx, ;高16位入dx
mov ax, ;低16位入ax
again: call divdw
push dx
inc bx
mov cx,di
jcxz mm
ok1:push ax
push bx
mov ax,di
mov dx,ax
pop bx
pop ax
jmp short again
mm: mov cx,ax
jcxz q
jmp short ok1
q: mov cx,bx
mov di,ds:
ok:
pop dx
mov bl,2
add dl,30h
mov es:20,dl
mov es:20,bl
add di,2
loop ok
add si,4
mov di,ds:
mov cx,ds:
add di,0a0h
loop s1
mov ax,4c00h
int 21h
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
;divdw 解决除法溢出
;参数 dx=高16位,ax=低16位
;返回 di=结果的高16位,ax=结果的低16位,dx=余数
divdw:
push cx
push bx
push ax ;保存低16位
mov ax,dx
mov dx,0 ;dx归零
mov bx,10d ;bx做除数
div bx ; ax/bxax为商 dx位余数
mov di,ax ;商入di
pop ax ;低16位出栈
div bx ;(低16位+商)/bx
K: pop bx
pop cx
ret
code ends
end start 代码不全…… 15岁的小朋友 发表于 2014-5-28 13:06 static/image/common/back.gif
代码不全……
我只要求显示第二排。第一排我写出来了。 显示第二排的代码请帮我看看具体应该怎么改 传说。 发表于 2014-5-28 13:09
我只要求显示第二排。第一排我写出来了。
是要显示第二列吧? 15岁的小朋友 发表于 2014-5-28 13:15 static/image/common/back.gif
是要显示第二列吧?
是的。 帮我看看吧 来人啊!!!!!!!!!!! 顶。。。!:mad::mad: 也是无人鸟我啊? 看了 眼晕只能默默帮你顶一下。。 强行顶!按时打扫打扫打扫的 vkevke_3437 发表于 2014-5-29 17:28 static/image/common/back.gif
assume cs:code,ss:stack,ds:data
data segment
db '1975','1976','1977','1978','1979','1980','19 ...
哥啊!我哪里写错了! vkevke_3437 发表于 2014-5-28 13:03 static/image/common/back.gif
assume cs:code,ss:stack,ds:data
data segment
db '1975','1976','1977','1978','1979','1980','19 ...
能告诉我你都改了哪里么? vkevke_3437 发表于 2014-5-28 13:03 static/image/common/back.gif
assume cs:code,ss:stack,ds:data
data segment
db '1975','1976','1977','1978','1979','1980','19 ...
还有我这些错误表明我哪里理解的不透彻?还有我那些细节没做好。 = = vkevke_3437 发表于 2014-5-28 13:03 static/image/common/back.gif
assume cs:code,ss:stack,ds:data
data segment
db '1975','1976','1977','1978','1979','1980','19 ...
我想想错误还是我自己去找吧。 主要你给我点评下我的源代码。 麻烦了 传说。 发表于 2014-5-29 18:59 static/image/common/back.gif
我想想错误还是我自己去找吧。 主要你给我点评下我的源代码。 麻烦了
不好意思 我不经常上网的 现在刚回来 改动的不是很多 一时忘了标记修改的地方了 传说。 发表于 2014-5-29 18:44 static/image/common/back.gif
能告诉我你都改了哪里么?
assume cs:code,ss:stack,ds:data
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,2795000,3753000,4649000,5937000
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
dw 5,3,42,104,85,210,123,111,105,125,140,136,153,211,199,209,224,239
dw 260,304,333
data ends
stack segment
db 80 dup (0)
stack ends
code segment
start: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,0
mov si,0 ;数据段偏移地址
mov di,0 ;显存段偏移地址
mov bl,2 ;颜色属性
mov ax,0b800h
mov es,ax
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;输出年份
mov cx,21d
s: push cx
mov cx,4
s0: mov al,
mov es:,al
mov es:,bl
add di,2
inc si
loop s0
add di,098h
pop cx
loop s
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;输出收入
mov cx,21
mov di,0
mov sp,50h
s1: mov bx,0 ;改动过的 使下一个转换计数重置为零
mov ds:,cx
mov ds:,di
ff: mov dx, ;高16位入dx 改动过的
mov ax, ;低16位入ax 改动过的
again:call divdw
push dx ;余数入栈 改动过的
inc bx
mov cx,di
jcxz mm
ok1:push ax
push bx
mov ax,di
mov dx,ax
pop bx
pop ax
jmp short again
mm: mov cx,ax
jcxz q
jmp short ok1
q: mov cx,bx
mov di,ds:
ok:
pop dx
mov bl,2
add dl,30h
mov es:20,dl
mov es:20,bl
add di,2
loop ok
add si,4 ;改动过的 dd占4字节
mov di,ds:;改动过的
mov cx,ds:
add di,0a0h ;改动过的 因为下次循环mov ds:,di
loop s1
mov ax,4c00h
int 21h
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
;divdw 解决除法溢出
;参数 dx=高16位,ax=低16位
;返回 di=结果的高16位,ax=结果的低16位,dx=余数
divdw:
push cx
push bx
push ax ;保存低16位
mov ax,dx
mov dx,0 ;dx归零
mov bx,10d ;bx做除数
div bx ; ax/bxax为商 dx位余数
mov di,ax ;商入di
pop ax ;低16位出栈
div bx ;(低16位+商)/bx
K: pop bx
pop cx
ret ;改动过的 返回call子程序 如果要用jmp 那上面就只能用 jmp divdw不能用call
code ends
end start vkevke_3437 发表于 2014-5-29 23:08 static/image/common/back.gif
assume cs:code,ss:stack,ds:data
data segment
db '1975','1976','1977','1978','1979','1980',' ...
感激。。。。。。。。。。。。
页:
[1]