fishz 发表于 2011-5-4 01:28:59

在屏幕第8行,3列

本帖最后由 fishz 于 2011-5-5 12:32 编辑

王爽实验10,编写显示字符串子程序
(dh)=行号,取值范围0~24
(dl)=列号,取值范围0~79
(cl)=颜色,ds:si指向字符串的首地址
例子:在屏幕第8行,3列,用绿色显示data段中的字符串assume ds:data,cs:code,ss:stack

data segment
          db 'Welcome to masm!', 0      ;words
color        db 02h, 24h, 71h                ;three colors
data ends

stack segment
        dw 8 dup(0)
stack ends

code segment
start:
        mov ax, data
        mov ds, ax
       
        mov ax, stack
        mov ss, ax
       
        mov dh, 8
        mov dl, 3
        mov cl, 2
        mov si, 0
       
        call show_str                   ;show_str函数
       
        mov ax, 4c00h
        int 21h
       
show_str:
        push bx
        push si
        push di
        push es
        push ax
        push cx
       
        mov bl, cl                      ;bl记录颜色
       
        mov al, 0ah                  ;显存每一行的像素数量/10 本来是a0,作为段地址时要除于10
        mov ah, 0
        dec dh
        mul dh                        ;第dh行
       
        ;mov dh, 2
        ;mul dh                        ;????
       
        add ax, 0b800h                  ;显存初地址
        ;dec dl
        ;adc al, dl                      ;第dl列
        ;adc ah, 0
        mov es, ax                     ;显存段地址
       
        dec dl
        mov al, dl
        mov ah, 0
        mov dl, 2
        mul dl                        ;没列占两个字节的空间,因为还有颜色的内存
        mov di, ax                      ;第dh行,第dl列
       
display:
        mov cl,
        mov ch, 0
        jcxz ok
        mov al, ds:
        mov es:, al
        inc di
        ;pop cx                        ;pop颜色
        mov es:, bl
        inc si
        inc di
        jmp short display
       
ok:
        pop cx
        pop ax
        pop es
        pop di
        pop si
        pop bx
       
        ret
code ends

end start 为什么我的是在对话框的第四行显示的???

sundelian 发表于 2011-5-4 22:36:15

呃..显示一个字符串而已,用汇编这么复杂呃.....

china0008 发表于 2011-5-5 12:07:34

编译测试 楼主的源码,我这里正常显示的。你是在什么环境下调试的?

fishz 发表于 2011-5-5 12:31:22

嗯,可能是运行环境的问题,之前我是在win7的debug下编译运行的。
现在我装了个VM虚拟机,在XP下运行就正确了。
页: [1]
查看完整版本: 在屏幕第8行,3列