关于王爽《汇编语言》实验10.3的疑问
assumecs:codedatasegmentdb10dup(0)dataendscodesegmentstart:movax,12666movbx,datamovds...
assume cs:code
data segment
db 10 dup(0)
data ends
code segment
start:mov ax,12666
mov bx,data
mov ds,bx
mov si,0
mov dx,0;这条指令删除后,窗口就一闪而过了,加了之后就可以显示结果,什么原因???
call dtoc
mov dh,1
mov dl,3
mov cl,2
call show_str
dtoc: mov bx,10
s: mov cx,ax ;保存商,商为0就退出循环
div word ptr bx
add dx,30h ;余数
mov ds:[si],dx
mov dx,0
inc si
loop s
ret
show_str:mov bx,0b800h
mov es,bx ;Video Memory
mov di,0
mov ah,0
mov si,0
mov al,0a0h ;160位一行
dec dh ;行数减1
mul dh ;al乘以dh,积为ax
dec dl ;计算列数
add dl,dl ;由于每个字占两位,低位为字,高位为颜色
add al,dl
mov bx,ax ;计算字母显示的位置
mov al,cl
mov ch,0
s1: mov byte ptr cl,ds:[si]
mov es:[bx+di],cl
mov es:[bx+di+1],al
jcxz ok
inc si
add di,2
jmp short s1
ok: mov ah,1
int 21H
code ends
end start 展开
data segment
db 10 dup(0)
data ends
code segment
start:mov ax,12666
mov bx,data
mov ds,bx
mov si,0
mov dx,0;这条指令删除后,窗口就一闪而过了,加了之后就可以显示结果,什么原因???
call dtoc
mov dh,1
mov dl,3
mov cl,2
call show_str
dtoc: mov bx,10
s: mov cx,ax ;保存商,商为0就退出循环
div word ptr bx
add dx,30h ;余数
mov ds:[si],dx
mov dx,0
inc si
loop s
ret
show_str:mov bx,0b800h
mov es,bx ;Video Memory
mov di,0
mov ah,0
mov si,0
mov al,0a0h ;160位一行
dec dh ;行数减1
mul dh ;al乘以dh,积为ax
dec dl ;计算列数
add dl,dl ;由于每个字占两位,低位为字,高位为颜色
add al,dl
mov bx,ax ;计算字母显示的位置
mov al,cl
mov ch,0
s1: mov byte ptr cl,ds:[si]
mov es:[bx+di],cl
mov es:[bx+di+1],al
jcxz ok
inc si
add di,2
jmp short s1
ok: mov ah,1
int 21H
code ends
end start 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询