|
主题 : : 求助!我的课程设计有个很棘手的问题 [已解决] |
回复[ 2次 ]
点击[ 411次 ] | |
荣誉值:14
信誉值:2
注册日期:2009-08-13 10:23 |
题目是:输入一个菱形的两条对角线长,在屏幕上用‘*’号画出一个彩色的菱形
assume cs:code,ss:stack,ds:data
stack segment
db 20 dup(0)
stack ends
data segment
dw 5 dup(0)
str db 'please input chang:',0dh,0ah,'$'
srr db 'please input kuan:',0dh,0ah,'$'
data ends
code segment
start:mov ax,data
mov ds,ax
mov bx,0
mov ax,0
call showy
call shuru
call showx
add bx,2
call shuru
mov bx,0
call jisuan
call xianshi
mov ax,4c00h
int 21h
shuru:mov ah,1
int 21h
sub al,30h
mov ah,0
mov ds:[bx],ax ;这里有个问题,明明ax是放在地上ds:[bx]里面,bx为0,为什么数据
ret ;在bx+120才找的到
jisuan:mov di,ds:[bx+120] ;然后这个子程序是进行计算的,有问题后就删了,直接赋个数值
mov si,ds:[bx+122] ;但是下面的值还是传不过去
ret
showy: mov ah,9
lea dx,str
int 21h
ret
showx: mov ah,9
lea dx,srr
int 21h
ret
xianshi: ;mov di,6 ;这个子程序是画出菱形,其中有两个重要的数据要接受分 ;mov si,2 di和si里面
mov ah,2 ;问题就在这里,这两个值在前面的子程序计算出来,不知道为什么在执行
mov bh,0 ;这个子程序时,值并没有传过来。而在子程序里加入mov di,6mov si,2
mov dh,1 ;又能画出菱形
mov dl,40
int 10h
mov ah,9
mov al,'*'
mov bl,11001010b
mov bh,0
mov cx,1
int 10h
mov cx,di
mov bp,cx
s2:mov cx,di
mov ax,si
add dh,al
mov ah,2
dec bp
push bp
sub cx,bp
mov dl,40
sub dl,cl
mov bh,0
int 10h
mov ah,9
mov al,'*'
mov bl,11001010b
mov bh,0
mov cx,1
int 10h
pop bp
mov cx,bp
jcxz jixu
loop s2
jixu:mov bp,1
mov cx,di
dec cx
s3:mov ax,si
mov bh,0
add dh,al
mov ah,2
push cx
mov cx,bp
add dl,cl
int 10h
mov ah,9
mov al,'*'
mov bl,11001010b
mov bh,0
mov cx,1
int 10h
pop cx
jcxz zaixu
loop s3
zaixu:mov bp,1
mov cx,di
dec cx
s4:mov ax,si
mov bh,0
sub dh,al
mov ah,2
push cx
mov cx,bp
add dl,cl
int 10h
mov ah,9
mov al,'*'
mov bl,11001010b
mov bh,0
mov cx,1
int 10h
pop cx
jcxz houxu
loop s4
houxu:mov bp,1
mov cx,di
dec cx
s5:mov ax,si
mov bh,0
sub dh,al
mov ah,2
push cx
mov cx,bp
sub dl,cl
int 10h
mov ah,9
mov al,'*'
mov bl,11001010b
mov bh,0
mov cx,1
int 10h
pop cx
jcxz jieshu
loop s5
jieshu:ret
code ends
end start | | |