博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实验10 编写子程序 1.显示字符串
阅读量:5302 次
发布时间:2019-06-14

本文共 1589 字,大约阅读时间需要 5 分钟。

assume cs:code,ds:datadata segment        db 'Welcome to masm!',0data endscode segmentstart:  mov dh,8 ;dh表示行号(范围:1~25)        mov dl,3 ;dl表示列号(范围:1~80)[注:每超过80等于行号自动加1]        mov cl,2 ;cl中存放颜色属性(0cah为红底高亮闪烁绿色属性)        mov ax,data        mov ds,ax        mov si,0        call show_str        mov ax,4c00h        int 21hshow_str: ;显示字符串的子程序[定义开始]        push cx ;cx和si寄存器后面会用到,防止值被覆盖,先入栈保存        push si        mov al,0a0h ;每行有 80*2 == 160个字节 == 0a0h个字节                    ;al也就是表示每行有多少个字符        dec dh ;行号在显存中下标从0开始,所以减1。因为计算机内部编号从0开始        mul dh ;dh存放的是行数,dh*al相当于 (n-1)*0a0h。表示从               ;第(n-1)*0a0h个Byte单元开始...               ;(n-1)*0a0h相乘的结果默认放入ax中        mov bx,ax ;定位好的位置偏移地址存放在bx里(bx定位了行地址)        mov al,2 ;每个字符占两个字节        mul dl ;dl存放列数,定位列,结果ax存放的是定位好的列的位置        sub ax,2 ;列号在显存中下标从0开始,又因为偶字节存放字符,所以减2        add bx,ax ;此时bx中存放的是行与列号的偏移地址        mov ax,0b800h ;显存开始的地址        mov es,ax ;es中存放的是显存的第0页(共0~7页)的起始的段地址        mov di,0 ;di指向显存的偏移地址。指向下一个要处理的字符的位置                mov al,cl ;cl是存放颜色的参数,这时候al存放颜色了                  ;因为cl下面要用来临时存放要处理的字符        mov ch,0 ;下边cx存放的是每次准备处理的字符s:      mov cl,ds:[si] ;ds:[si]指向“Welcome to masm!”,0                       ;例如当si=0时,就是把字符W赋给cl。cl存的是W的ASCII码        jcxz ok ;当cl的值为0的时候,cx == 0,则发生跳转,到ok处结束处理!        mov es:[bx+di],cl ;偶地址存放字符        mov es:[bx+di+1],al ;奇地址存放字符的颜色属性        inc si ;si自增1,指向下一个将要处理的字符串中的字符        add di,2 ;指向了下个字符。因为每个字符在显存中占两个字节        jmp short s ;无条件跳转,jcxz是离开的关键跳ok:     pop si        pop cx        ret ;显示字符串的子程序[定义结束]code endsend start

执行效果截图:

Screen Shot 2018-09-24 at 9.52.46 pm

转载于:https://www.cnblogs.com/kafffka/p/9696895.html

你可能感兴趣的文章
在编译安装程序时候遇到/usr/bin/ld: cannot find -lxxx的时候的解决办法。
查看>>
使用 INSERT 和 SELECT 子查询插入行
查看>>
ubuntu重装mysql
查看>>
English trip -- VC(情景课)1 C What's your name?(review)
查看>>
redirect的错误用法asp.net怎么使用自定义错误
查看>>
在MyEclipse下统计工程的代码(package、行数、类个数)
查看>>
Erlcron分析学习
查看>>
idea 快捷键
查看>>
SimpleDateFormate的使用
查看>>
菜鸟运维笔记:Windows上用Xshell管理你的云主机
查看>>
JavaScript中的this
查看>>
Activity生命周期
查看>>
jsp
查看>>
OpenNI / NITE的Stable版更新
查看>>
03 基本数据结构 - 栈
查看>>
Hyper-V虚拟机上安装一个图形界面的Linux系统
查看>>
微信小程序之随笔
查看>>
每秒处理10万高并发订单的乐视集团支付系统架构分享
查看>>
Lua_02
查看>>
ios蓝牙详解
查看>>