汇编语言 第三版 王爽 实验10 显示字符串 show_str 独立完成

来源:互联网 发布:java 广告位管理系统 编辑:程序博客网 时间:2024/06/05 03:54
assume cs:codedata segment    db 'Welcome to masm!',0data endsstack segment    db 32 dup ('0')stack endscode segment    start:  mov dh, 8            mov dl, 3            mov cl, 2       ;可以把2修改成82h,观看闪烁效果             mov ax, data            mov ds, ax            mov si, 0       ;初始化数据段            mov ax, stack            mov ss, ax            mov sp, 32      ;初始化栈段            call show_str            mov ah, 1            int 21h         ;获得键盘输入,使得屏幕可以显示打印的字符串                            ;按任意键结束程序,有点像命令行的pause命令            mov ax, 4c00h            int 21hshow_str:   push cx            push dx            mov ax, 0b800h              mov es, ax      ;用es存储显存段地址            sub dh, 1       ; 8 - 1 = 7            mov al, dh      ;给al            mov bl, 10      ;10行数据 为一个显示行            mul bl          ;显示地址b800:第十行第0列,al乘10在ax中            mov bl, 16      ;还得乘以16,一行16个字节            mul bl            mov bp, ax      ;ax中的行首地址暂存到bp中            sub dl, 1       ;3 - 1 = 2            mov al, dl      ;al中值为2            mov dl, 2                   mul dl          ; 2 * 2 积在ax中,列位置            add ax, bp      ;83行偏移地址 在ax中            mov di, ax      ;显示偏移地址放到di中            mov bp, 0       ;不再使用,清空bp            mov bl, cl      ;字体颜色放起来            ; mov di, 0464h ;160 * 78行; 测试代码    show:   mov al, ds:[si]            mov ah, 0            mov cx, ax      ;每个数据 放到cx中,jcxz会控制循环结束            mov byte ptr es:[di], al        ;显示字符            mov byte ptr es:[di + 1], bl    ;显示颜色            ;也可以这样            ;mov ah, bl            ;mov word ptr es:[di]            ;后面di应该加1了            jcxz ok            add di, 2       ;显存每次走两个字节            inc si          ;数据每次走一个字节            loop show        ok: pop dx            pop cx            retcode endsend start
阅读全文
0 0