汇编语言(王爽)实验十
实验十
编写3个子程序
1、显示字符串
功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串
参数:(dh)=行号、(dl)=列号、(cl)=颜色、ds:si指向字符串的首地址
行、列从0开始计数
如要求在屏幕的8行3列,用绿色显示data段中的字符串
assume cs:code
data segmentdb 'Welcome to masm!',0
data endscode segmentstart: mov dh,8mov dl,3mov cl,2mov ax,datamov ds,axmov si,0call show_strmov ax,4c00hint 21hshow_str: mov ax,0B800H ; 确定输入字符串的段地址mov es,axmov al,00A0H ; 每行差00A0个字节,不能字母开头mul dh ; 计算出的"行偏移地址"存在ax中push ax ; 入栈,暂存mov al,2 ; 每一列占两个字节,第2个字节mul dl ; 计算出的"列偏移地址"存在ax中pop di ; 取出之前的"行偏移"add di,ax ; "行偏移"+"列偏移"=总的偏移地址input: push cx ; jczx要用到cx,会影响颜色的输入mov cx,[si] ; 从data中取字符jcxz end_input ; 若取到末尾,跳转mov es:[di],cx inc si ; 指向下一个字符inc di pop cxmov es:[di],cl ; 存入颜色信息inc dijmp short inputend_input: pop cx ; 在到了字符串末尾之后,; 之前的cx还在栈中,要出栈; 否则ret从栈中取出原来的IP值时会出错retcode ends
end start
2. 解决除法溢出问题
功能:进行不会产生溢出的除法运算,被除数为dword,除数为word,结果为dword
参数:(ax)=dword型数据的低16位
(dx)=dword型数据的高16位
(cx)=除数
返回:(dx)=结果的高16位
(ax)=结果的低16位
(cx)=余数
思路:对于32位的被除数,先高位的16位在前面补0组成一个32位数除以除数,得到的商便是最终结果的高16位,而得到的余数作为一个新的32位数的高16位,而被除数的低16位作为新32位数中的低16位,除以被除数,得到的余数就是最终的余数,而得到的商就是结果的低16位
assume cs:codecode segmentstart: mov ax,4240Hmov dx,000FHmov cx,0AHcall divdwmov ax,4c00hint 21hdivdw: push ax ; 先高位除以被除数,暂存axmov ax,dx mov dx,0 ; 除数是16位,被除数应该为32位,高位存储在dx中div cxmov bx,ax ; 用bx存储ax,即商pop ax ; 弹出低位的值div cx ; 此时,第一次除法运算得到的余数作为高16位的值; 存储在在dx中mov cx,dxmov dx,bxret
code ends
end start
3.数值显示
把数据如12666以十进制显示在屏幕上
思路:12666每次除以10取余,数字加30H就是对应的字符的ASCII码值(字符“0”~“9”对应的ASCII码是30H-39H),将数据转换为字符串,然后调用show_str显示在屏幕上
assume cs:codedata segmentdb 10 dup (0)
data endscode segmentstart: mov ax,12666mov bx,datamov ds,bxmov si,0call dtocmov dh,8mov dl,3mov cl,2call show_strmov ax,4c00hint 21hdtoc: mov bx,10 ; 除数mov dx,0 ; dx为32位被除数的高16位div bxinc si ; 记录数的长度mov cx,ax ; 把商赋值给cx,用于jcxzpush dx ; 判断前先把余数入栈jcxz okjmp short dtocok: mov cx,si ; 数的长度就是循环的次数mov si,0 ; si为data段的偏移地址s: pop bxadd bx,30H ; 数字的大小+30H就是对应字符的; ASCII码mov [si],bl ; 存储那些ASCII码只需一个字节inc siloop smov [si],cl ; 由于show_str使用时; 默认字符串以0结尾,因此在最后补0mov si,0 ; 修改为0保证show_str的正确执行retshow_str: mov ax,0B800H ; 确定输入字符串的段地址mov es,axmov al,00A0H ; 每行差00A0个字节,不能字母开头mul dh ; 计算出的"行偏移地址"存在ax中push ax ; 入栈,暂存mov al,2 ; 每一列占两个字节,第2个字节mul dl ; 计算出的"列偏移地址"存在ax中pop di ; 取出之前的"行偏移"add di,ax ; "行偏移"+"列偏移"=总的偏移地址input: push cx ; jczx要用到cx,会影响颜色的输入mov cx,[si] ; 从data中取字符jcxz end_input ; 若取到末尾,跳转mov es:[di],cx inc si ; 指向下一个字符inc di pop cxmov es:[di],cl ; 存入颜色信息inc dijmp short inputend_input: pop cx ; 在到了字符串末尾之后,; 之前的cx还在栈中,要出栈; 否则ret从栈中取出原来的IP值时会出错retcode ends
end start
汇编语言(王爽)实验十相关推荐
- 汇编语言王爽-实验9
王爽汇编语言实验9 实验要求 参考资料 代码 assume cs:codedata segmentdb 'welcome to masm'db 02h, 24h, 71j data endscode ...
- 汇编语言---王爽 (实验 8)分析一个奇怪的程序
简介 : 分析下面的程序 , 在运行前思考 , 这个程序可以正常返回吗 ? 运行后再思考 , 为什么是这种结果 ? 通过这个程序加深对相关内容的理解 assume cs:code code segme ...
- 汇编语言王爽 实验第四章
实验一 :创建第一个源程序 在asm文件夹中创建一个名为t2的记事本 编写源文件,其次将其格式修改为asm文件 用masm t2;进行编译生成obj文件 然后用link t2;进行连接生成exe文件 ...
- 汇编语言王爽 实验12
都在代码里面了 assume cs:code,ds:data,ss:stackdata segmentdb 128 dup(0) ;一般把中断输出的字符 写道 0000:0200 -0000:03 ...
- 【汇编语言 王爽】实验14代码
实验需求如下: 编程,以"年/月/日 时:分:秒"的格式显示时间 注意:CMOS RAM中储存着系统的配置信息,除了保存时间信息的单元外,不要向其他单元写入内容,否则将引起一些系统 ...
- 汇编语言 王爽 第四版 实验5
汇编语言 王爽 第四版 课后检测点 课后实验 持续更新~~ 实验5 编写.调试具有多个段的程序 1 编译连接下面程序,用debug加载.跟踪,回答问题. assume cs:code,ds:data, ...
- 汇编语言 王爽 第四版 实验1
汇编语言 王爽 第四版 课后检测点 课后实验 持续更新~~ 文章目录 实验1 查看CPU和内存,用机器指令和汇编指令编程 1 开始执行命令: 2 指令 过程 3 4 实验1 查看CPU和内存,用机器指 ...
- 汇编语言——王爽版 总结
汇编语言-王爽summary<考试复习版> 摆烂一学期,期末抱佛脚 只针对必要内容总结,并非按目录总结 文章目录 汇编语言-王爽summary<考试复习版> `只针对必要内容总 ...
- 汇编语言 王爽 第四版 第二章 检测点2.2
汇编语言 王爽 第四版 课后检测点 课后实验 持续更新~~ 检测点2.2 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为 0010H 到 1000FH . 最小肯定是偏移地址为0, ...
- 汇编语言 王爽 第四版 第三章 检测点3.2
汇编语言 王爽 第四版 课后检测点 课后实验 持续更新~~ 检测点3.2 1 补全下面的程序,使其可以将10000H-1000FH中的8个字,逆序拷贝到20000H-2000FH中. mov ax,1 ...
最新文章
- android studio 顶部导航栏_Android10 手势导航开发与处理:边到边(I)
- MATLAB编写ode文件,MATLABODE45问题M文件为br/functiondq 爱问知识人
- 实验三 密码破解技术
- 获取所有栈的信息,只有最上面的和最下面的,但是不能获取栈中间的activity信息...
- 操作系统(十六)调度算法(一)
- yara 模式匹配 android,YARA——恶意软件模式匹配利器
- 块级元素(HTML、CSS)
- 容器技术Docker K8s 4 容器编排技术基础-Kubernetes
- PDF粘贴到word的英文字母的间距很宽,很奇怪
- Java数据结构与算法4-树学习笔记
- 2021年杭州行政区划调整方案与远景轨道线网概念图
- oracle 取农历函数,完善SQL农历转换函数
- Day1 python基础
- 鼎铛有耳 智能硬件供应链新一代“网红”诞生 ——第三届HCFT智能硬件供应链大会品牌盛会颁奖典礼在深成功举办...
- 学得到专栏作者如何回答问题:万维钢(1)
- 在oracle 中编写一个程序,用VC 开 发 基 于ORACLE 数 据 库 应 用 程 序 的 两 种 方 法...
- matlab 车身阻尼比曲线,汽车阻尼比及振动响应的分析
- 添加系统调用的方法,2.6.35(没有测试)
- 高斯消元法的算法介绍
- 玩南红的男人具备这几点,一般都不会太差