放牧代码和思想
专注自然语言处理、机器学习算法

8086汇编显示字符串的子函数

;———————————————————————–
; 显示字符串的子函数—— Hankcs整理,2010
;———————————————————————–
assume cs:code,ds:data
data segment
        db ‘Just Call Sub show_str!’,0
data ends

code segment

start:

        mov dh,1              ;dh装行号(范围:1–25)
        mov dl,1              ;dl装列号(范围:1–80)[注:每超过80等于行号自动加1]
        mov cl,0ah            ;cl中存放颜色属性(0ah为绿色高亮)
        mov ax,data
        mov ds,ax
        mov si,0
       
        call show_str

        ;程序暂停,等待输入
        MOV AH,01H
        INT 21H

        mov ax,4c00h
        int 21h

       
;功能:显示字符串的子程序
;参数:(ds)字符串首地址 (si)欲显示字符串的开始 (dl)屏幕X坐标 (dh)屏幕Y坐标 (cl)颜色
;返回:无
show_str:  
        push cx
        push si
        push ax
        push dx
        push bx
        push es
        push di         ;子程序一共使用了七个寄存器
       
        mov al,0A0h
        dec dh          ;行号在显存中下标从0开始,所以减1
        mul dh
        mov bx,ax
        mov al,2
        mul dl
        sub ax,2       ;列号在显存中下标从0开始,又因为偶字节存放字符,所以减2
        add bx,ax      ;此时bx中存放的是行与列号的偏移地址
        mov ax,0B800h
        mov es,ax      ;es中存放的是显存的第0页(共0–7页)的起始的段地址
        mov di,0
        mov al,cl
        mov ch,0

s:      mov cl,ds:[si]
        jcxz ok
        mov es:[bx+di],cl       ;偶地址存放字符
        mov es:[bx+di+1],al     ;奇地址存放字符的颜色属性
        inc si
        add di,2
        jmp short s

ok:  

        pop di
        pop es
        pop bx
        pop dx
        pop ax
        pop si
        pop cx
        ret    ;显示字符串的子程序[定义结束]

code ends

end start

知识共享许可协议 知识共享署名-非商业性使用-相同方式共享码农场 » 8086汇编显示字符串的子函数

分享到:更多 ()

评论 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    学习了..

    appcounts8年前 (2010-06-21)回复

我的开源项目

HanLP自然语言处理包基于DoubleArrayTrie的Aho Corasick自动机