. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验10.1显示字符串  [待解决] 回复[ 2次 ]   点击[ 259次 ]  
wrsg
[帖 主]   [ 发表时间:2019-08-24 13:05 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-11-21 12:54
assume  cs:codesg,ds:datasg,ss:stack

datasg segment
        db 'welcom to masm!',0
datasg ends

stack segment
        dw 10 dup (0)
stack ends

codesg segment
start:                     mov dh,23
                        mov dl,48
                        mov cl,2
                
                        mov ax,datasg
                        mov ds,ax
                        mov ax,stack
                        mov ss,ax
                        mov sp,16
                        mov si,0
                        call show_str
                
                        mov ax,4c00h
                        int 21h


  show_str:        push ax
                        push bx 
                        push cx
                        push si
                        push di
                                                
                        mov ax,0b800h
                        mov es,ax
                        mov bl,cl                ;存放字体颜色
                        
                        mov al,160
                        dec dh
                        mul dh                        ;乘法结果为ax
                        mov dh,0
                        add dl,dl
                        add ax,dx                ;ax 为行+列位置
                        mov di,ax       ;显示屏位置
                        
                        mov ah,bl                ;设置字体颜色al
        change: mov ch,0
                        mov cl,[si]
                        jcxz ok          ;遇到0结束
                        mov al,ds:[si]
                        
                        mov es:[di],ax
                        inc si
                        add di,2
                        
                        jmp short change
                
        ok:                pop di
                        pop si
                        pop cx
                        pop bx
                        pop ax
                        ret
                        
codesg ends
end start
wrsg
[第1楼]   [ 回复时间:2019-08-24 13:15 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-11-21 12:54
测试通过
wrsg
[第2楼]   [ 回复时间:2019-08-27 17:59 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-11-21 12:54
assume cs:codesg

datasg segment
        db 'welcom to masm!',0
datasg ends

stack segment
        db 32 dup (0)
stack ends

codesg segment
        start:                        mov                ax,datasg
                                mov                ds,ax
                                mov                si,0                ;ds:si指向字符串的首地址
                                mov                ax,stack
                                mov                ss,ax
                                mov                sp,16
                                mov                dh,8
                                mov                dl,3
                                mov                 cl,2
                                call                show_str
                
                                mov                 ax,4c00h
                                int                 21h

        ;name:                show_str
        ;function:        行dh,列dl,颜色cl, ds:si指向字符串的首地址
        ;return:        0
        show_str:                push         ax
                                push         bx
                                push         cx
                                push         di
                                push         si
                                
                                mov         ax,0b800h
                                mov         es,ax                ;显示屏段起始地址
                                
                                mov         bl,cl                ;暂存颜色
                                mov        al,160
                                mul         dh                ;8位乘法al*dh,结果储存在ax
                                mov         dh,0
                                add        dl,dl                ;dh,dl合成dx,dl列
                                add         ax,dx
                                mov         di,ax                ;es:di为显示屏当前位置
                                mov        ah,bl                ;字体颜色
        
          show_s0:                mov         ch,0
                                mov         cl,ds:[si]
                                jcxz         show_s1
                                
                                mov         al,ds:[si]
                                mov         es:[di],ax
                                inc                si
                                add         di,2
                                jmp         short show_s0
          
          show_s1:                pop         si
                                pop         di
                                pop         cx
                                pop         bx
                                pop         ax
                                ret



codesg ends
end start
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved