王爽《汇编语言》实验10_汇编语言王爽 实验10_benben_dog的博客-程序员宅基地

技术标签: 汇编语言  实验10  王爽  Linux内核学习  汇编补课  

1.显示字符串

编写一个通用的子程序,向调用者提供与显存无关的接口,方便调用者在窗口指定位置显示字符串的功能。

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:	mov ax,0b800h		;显存的段地址
		mov es,ax
		mov al,0a0h		;0a0h表示每行的字符数(每行80个字符,每个字符需占用2个字节,
						;其中包含属性字节),用于计算用户指定行的起始地址			
		mul dh			;计算得到指定行偏移地址
		mov di,ax
		mov al,2		;用于计算用户指定行的起始列位置
		mul dl
		add di,ax		;最后得到需要显示字符的具体偏移地址,并赋给di
			
    put:	push cx			;由于在子程序中需要使用cx寄存器,这里保存cx中的值(字体的属性)
		mov cl,ds:[si]	    ;获得需要显示的字符
		mov ch,0
		jcxz ok			;若cx=0,则转到ok处,返回,即表示到达了字符串末尾
		mov es:[di],cl		
		pop cx
		mov es:1[di],cl
		inc si
		add di,2
		jmp short put			
ok:		ret				;子程序返回
code ends
end start

运行结果:

2.解决除法溢出的问题

assume cs:code

code segment
	mov ax,4240h
	mov dx,000fh
	mov cx,0ah
	call divdw
	
	mov ax,4c00h
	int 21h
	
;子程序	
divdw:	push bx			;保存主程序中可能使用的寄存器
	push ax			;将ax暂存,用于高16位除法
	mov ax,dx
	mov dx,0
	div cx
	
	mov bx,ax		;将高16位除法所得商暂存bx中
	pop ax			;将ax出栈,用于低16位除法
	div cx
		
	mov cx,dx		;将余数保存在cx中
	mov dx,bx		;将结果的高16位保存在dx中
		
	pop bx			;将子程序开始保存的寄存器还原,以确保主程序的正确
	ret
code ends
end

初始状态:

子程序返回前:

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/benben_dog/article/details/100547375

智能推荐

Unity物理引擎:关节简介(弹簧关节)_Mr_Lsz的博客-程序员宅基地

弹簧关节可以将两个刚体连接到一起。Connected Spring:连接刚体:Anchor:锚点;Spring:弹簧;Damper:阻尼;Break Force:断开力:Break Torque:断开扭矩。以上参数详解见固定关节。Min Distance:最小距离:该项用于设置弹簧启用后的最小距离值,如果两个对象之间的当前距离与初始距离的差大于此值,则不会开启弹簧。

德沃夏克右手键盘适合体验_键盘的糟糕用户体验_weixin_26715991的博客-程序员宅基地

德沃夏克右手键盘适合体验If you ever read about user experience, you’ll probably hear people saying good design is invisible. This means a good design is intuitive and nonintrusive, so the user can pay attention t...

vue给数组和对象进行增加删除字段不更新数据的解决方法 — Vue.set(object, key, value)_vue像数组对象里如何新增多个属性(key:value),不删除原本的_小白变怪兽的博客-程序员宅基地

关于为什么数据变动bu’chong不重新渲染, 官网已经介绍了, 这里就不再多说:下面主要记录一下具体的操作代码:组件基本代码:<style lang="sass"></style><template><div> <div>

storm 如何编写可靠的spout和bolt_hui1207968974的博客-程序员宅基地

一、前言   对于不使用trident的人来说,使用基本的storm spout,bolt操作,需要理解storm的ack机制,保证消息的完整性,Storm 提供了三种不同层次的消息保证机制,分别是 At Most Once、At Least Once 以及 Exactly Once。消息保证机制依赖于消息是否被完全处理。   怎样才认为消息被完全处理?每个从 Spout发出的 Tup...

react+antd 制作Checkbox+Tag联动标签_checkbox tag_前端梳理记录的博客-程序员宅基地

实现效果:父组件:import GameTabAll from './GameTabAll'; const onSelect = (arr) => { console.log('onSelect=' + arr); onSelectTags(arr); };//taglist:所有标签列表//tagid:默认选中标签//onSelect:乘接子组件修改后返回值<GameTabAll options={taglist} tagid={JSON.

ReactJS入门(二)—— 组件的生命周期_dcof99817的博客-程序员宅基地

如果你熟悉avalon,使用过data-include-rendered 和 data-include-loaded 等回调方法,那么你会很好地理解React组件的各个生命周期。说白了其实就是React组件状态变化前后的时间点,我们可以利用生命周期的接口在相应的时间点做回调操作。React的官方文档提及了如下几个组件的生命周期:Mounting/组件挂载相关:comp...

随便推点

python修改paramiko模块开发运维审计堡垒机_aks6853428的博客-程序员宅基地

  1. 第三方paramiko模块下载:https://github.com/paramiko/paramiko  2. paramiko源码包演示:运行demo.py文件远程登陆      3. 通过修改paramiko源码,主要是修改demo.py文件和interactive.py开发运维审计堡垒机  4. 堡垒机原理      堡垒机有一个公共账号,所...

网站分析工具 Awstats 的部署_六月的_羽的博客-程序员宅基地

从阿里云的 虚拟主机迁移后 很多东西需要自己部署 这里部署了一个 awstats 用于分析网站运行情况CGI开启Awstats 需要依赖 cgi 组件需要先打开 CGIa2enmod cgi配置 awstatscp awstats /usr/local/awstats在目录下执行 perl awstats_configure.pl 配置awstats似乎是因为版本较旧的原因他...

ORB_SLAM2学习记录1-ORB_SLAM2的安装与运行_orbslam接收的topic_Lucifer_zhang的博客-程序员宅基地

(一)、环境的配置1.ros环境的安装,可直接参开wiki.ros2.building ORB_SLAM2   git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM23.编译cd ORB_SLAM2chmod +x build.sh. /build.sh4.Monocular  Examp

对比记录JDKproxy,cglibProxy,struts2拦截器,springMVC拦截器_chunnuoju1693的博客-程序员宅基地

import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class JdkProxy implements Invo...

docker-compose 单机合集_Mj_lo的博客-程序员宅基地

所有compose文件统一命名 docker-compose.yaml所有启动 docker-compose up -d停止 docker-compose down1:mongodbversion: '2'services: mongo: image: mongo:4.4.0 restart: always environment: - TZ=Asia/Shanghai ports: - 27017:27017 vol

苹果已是九连冠!2021全球最佳品牌榜:国内竟只有华为上榜_程序员的店小二的博客-程序员宅基地

10月21日消息,昨日Interbrand发布了2021年全球最佳品牌排名,该榜单主要考虑了企业的品牌价值和增长速度,能够进入该榜单的品牌无不是行业翘楚。今年苹果、亚马逊、微软位列榜单前三,热门品牌特斯拉位列第14,中国品牌仅有华为进入榜单,位列第85名。对于中国的企业来说,这是一个巨大的打击,苹果已经连续9年蝉联榜首,三星今年终于进入前五,中国企业却只有一家华为进入榜单,而且还没进入前五十名。其他企业需要认真考虑,国内企业为什么只有华为能够进入榜单。小雷认为,华为能够成为国内高科技企业的代表,

推荐文章

热门文章

相关标签