实验10.3,不能正常显示。
本帖最后由 cenjie88 于 2012-2-10 14:09 编辑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
call dtoc
mov dh,8
mov dl,3
mov cl,2
call show_str
dtoc:
push dx
push cx
push bx
push si
push ax
mov bx,0
s1:mov dx,0
mov cx,10
div cx
mov cx,ax
jcxz s2
push dx
inc bx
jmp s1
s2:push dx
inc bx
mov cx,bx
s:pop ax
add ax,30h
mov ds:,ax
add si,2
loop s
pop ax
pop si
pop bx
pop cx
pop dx
ret
show_str:
push dx
push cx
push bx
push si
push ax
mov ax,0b800h
mov es,ax ;显存段地址
mov al,0a0h
sub dh,1
mul dh
mov dh,0
add ax,dx
mov bx,ax ;得出显存8行3列偏移地址
mov ah,cl ; 字符颜色属性给到ah
mov cx,5 ;已知要循环5次。
s11:
mov al,ds: ;事先改好的准备传输到显存
mov es:,al
mov es:1h,ah
inc si
inc si
loop s11
pop ax
pop si
pop bx
pop cx
pop dx
ret
mov ax,4c00h
int 21h
code ends
end start
s2:push dx
inc bx
mov cx,bx
s:pop ax
add ax,30h
mov ds:,ax 这里你先存的是字型数据
add si,2
loop s
s11:
mov al,ds: ;事先改好的准备传输到显存 这里你出的是字节数据
mov es:,al
mov es:1h,ah
inc si
inc si
loop s11
mov al,0a0h
sub dh,1
mul dh
mov dh,0
add ax,dx 这里是神魔意思,dl列号 要乘2 (一个字符占两个字节 字符和属性)
mov bx,ax
就发现了这几处 我用debug试了好多次,就是不能成功存入显存。
哦,原来是0B59:FFF0处不能作栈用。多加个栈段就OK了
、
页:
[1]