leader4 发表于 2018-5-17 22:36:31

《王爽汇编》第十章实验10-1

本帖最后由 leader4 于 2018-5-17 22:36 编辑

用了一下午才写出来,但不知为何,实际结果却差了一行。
后来查看相关寄存器,发现显存起始地址变成了B80A0,而不是B8000。不知道为什么。。。
个人能力有限,实在不知道原因。所以先记录一下,以后再去排查。
如果有大牛知道原因,还望指点一下。

;说明:在指定位置,用指定颜色,显示一个用0结束的字符串。
;参数:(dh)=行号(取值范围0~24),(dl)=列好(取值范围0~79),
;           (cl)=颜色,ds:si指向字符串的首地址
;结果:无返回
;举例:8行3列处,显示绿字。

assume cs:code,ss:stack,ds:data

data segment
        db 'Welcome to masm!',0
data ends

stack segment
        dw 8 dup (0)
stack ends

code segment
start:        mov dh,8
                mov dl,3
                mov cl,2
                mov si,0
                mov ax,data
                mov ds,ax
                mov ax,stack
                mov ss,ax
                mov sp,16
               
                call show_str

                mov ax,4c00h
                int 21h
show_str:
                dec dh
                dec dl

                ;计算行号
                mov al,dh
                mov bl,160
                mul bl
                push ax

                ;计算列号
                mov al,dl
                mov bl,2
                mul bl
                push ax

                ;显示位置第一点
          mov bx,8000H
                mov bp,sp
                add bx,
                add bx,

                mov ax,0b000H
                mov es,ax

                ;向指定内存位置写入数据
        wr:        mov al,ds:
                mov es:,al
                mov es:,cl
                mov ch,0
                push cx
                mov cl,ds:
                jcxz ok
                pop cx
                inc si
                add bx,2
                jmp        short wr

                ok:pop cx
             pop ax
                   pop ax
                   ret

code ends
end start
页: [1]
查看完整版本: 《王爽汇编》第十章实验10-1