. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
主题 : :  实验10_1,求找茬  [待解决] 回复[ 2次 ]   点击[ 560次 ]  
lonelyhover
[帖 主] [ 发表时间:2013-05-21 15:26 ] 
荣誉值:0
信誉值:0
注册日期:2009-07-18 20:29
assume cs:code
data segment
    db 'welcome to masm!',0
data ends

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

    mov ax,4c00h
    int 21h

show_str:
    push ax
    push bx
    push cx
    push si
    push es        ;保护现场
    mov ax,0b800h                                        ;mov al,0ah
    mov es,ax        ;定位显存                        ;mul dh
    mov al,0a0h                                        ;add ax,0b800h
    mul dh                                                ;mov es,ax
    mov bx,ax        ;设置行号                        ;mov al,2h
    mov al,2h                                        ;mul dl
    mul dl                ;设置列号                        ;mov bx,ax
    add bx,ax        ;设置显示位置基址                ;减少一行指令,节省3字节空间,重定位显示位置需要重新修改段寄存器
    mov al,cl        ;设置字体属性

show:
    mov cl,[si]
    mov ch,0h
    jcxz ok                ;判定字符串结尾
    mov es:[bx][si],cl
    inc si                ;显示字符
    mov es:[bx][si],al
    inc bx                ;设置字体属性
    jmp show

ok: 
    pop es
    pop si
    pop cx
    pop bx
    pop ax                ;恢复现场
    ret                ;返回

code ends
end start
lonelyhover
[第1楼] [ 回复时间:2013-05-23 13:20 ] 
荣誉值:0
信誉值:0
注册日期:2009-07-18 20:29
补充修改:
show:        ;输出字符
        mov cl,[si]
        mov ch,0h
        jcxz show_str_ok        ;判定字符串结尾
        mov es:[bx],cl
        inc bx        ;显示字符
        inc si        ;指向下一字符
        mov es:[bx],al
        inc bx        ;设置字体属性
        jmp show        
ok:      .
         .
         .
         .
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved