汇编语言showStr测试子程序

来源:互联网 发布:轩辕剑符鬼突破数据 编辑:程序博客网 时间:2024/06/06 13:25

王爽《汇编语言》课后练习题

显示字符串子程序

2017.4.23

;name :showStr

;fuction : 在指定的位置,用指定的颜色,显示一个用0结束的字符串

;参数:(dh)=行号(取值范围0-24),(dl)=列号(取值范围0-79), (cl) = 颜色,ds:si指向字符串的首地址

;test Code : 在屏幕的8行3列,用绿色显示data段中的字符串

;eg:->init

; mov dh,8 8行

; mov dl,3 3列

; mov cl,2 字符属性 2->黑底绿色无高亮无闪烁

; mov ax,data

; mov ds,ax 字符串段地址

; mov si,0 字符串起始地址

;=====代码主体=======

assume cs:codesg

stack segment

db 128 dup(?)

stack ends

data segment

 db 'Hello World',0

data ends

codesg segment

start:

 `mov ax,stack   mov ss,ax   mov sp,80H  mov dh,8      ;8行  mov dl,3      ;3列  mov cl,2      ;字符属性  2->黑底绿色无高亮无闪烁  mov ax,data  mov ds,ax     ;字符串段地址  mov si,0      ;字符串起始地址  call showStr  ;调用显示子程序  mov ax,4c00h  int 21h`      ;返回Dos

; *********************************************

showStr:

    push dx     push cx     push es     push bx      push si    push di           call showStrInit      mov dh,cl              ;由dx = dh + dl ; dh = 颜色 dl = 字符

showStringMain:

    mov cx,0    mov cl,ds:[si]    jcxz showStrRet    mov dl,cl     mov es:[di],dx    add di,2    inc si     jmp showStringMain

showStrInit:

          mov al,160          mov bl,dh                  mul bl           mov di,ax        ;得到行数 , 最终用es:di指向显示区域          mov al,2          mov bl,dl           mul bl           add di,ax          mov ax,0b800h          mov es,ax        ret 

showStrRet:

        pop di         pop si         pop bx         pop es         pop cx         pop dx     ret 

; *********************************************
codesg ends
end start
end