汇编语言showStr测试子程序

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

显示字符串子程序

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值