8086汇编语言nasm版本
实模式和保护模式
在计算机上面,实模式存在的时间非常之短,所以一般我们是感觉不到它的存在的。CPU复位(reset)或加电(power on)的时候就是以实模式启动,在这个时候处理器以实模式工作,不能实现权限分级,也不能访问20位以上的地址线,也就是只能访问1M内存。之后一般就加载操作系统模块,进入保护模式
从显示字符串开始
屏幕有 25列X80行
列和行从0开始计数
显存地址空间:
0xB8000~0xBFFFF
屏幕上的每个字符对应着显存中的两个连续字节,前一个是字符的ASCII代码,后面是字符的显示属性,包括字符颜色(前景色)和底色(背景色)
一般情况下,如果没有附加任何指示,段地址默认在段寄存器DS中。比如
mov byte [0x00],'L'
使用ES作为段地址的情况:
mov byte [es:0x00],'L'
使用方括号括起来的原因:目的操作数给出的是一个内存地址,我们要用源操作数来修改这个地址里的内容,所以,目的操作数必须用方括号围起来,以表明它是一个地址。
关键字byte用来修饰目的操作数,指出本次传送是以字节的方式进行的。
初始化段寄存器ES
mov ax,0xb800 mov ex,ax ;不能直接将立即数移到段寄存器中
显示标号的汇编地址
在源程序的编译阶段,编译器会把源程序整体上作为一个独立的段来处理,并从0开始计算和跟踪每一条指令的地址。
在NASM汇编语言里,每条指令的前面都可以拥有一个标号,以代表和指示该指令的汇编地址。
在程序中声明并初始化数据
db byte 0,0,0,0,0
代表声明了5个字节,并初始化为0
db,dw,dd,dq不是处理器指令,它指示编译器提供的汇编指令,所以称做伪指令。
访问操作数
在 nasm 语法里,对 memory 操作数需要加 [ ] 括号
常用运算符积累
mul
两个相乘数,要么都是8位,要么都是16位。 8位乘法,16位乘法。
如果是8位,一个数字默认存放在al中,另外一个数字存放在其他8位寄存器中或者字节型内存单元中。
如果是16位,一个数字默认存放在ax中,另外一个数字存放在其他16位寄存器中或者字型内存单元中。
结果: 8位乘法,得到一个16位数, 结果存放在ax中
16位乘法,得到一个32位数, 低16位存放在ax中,高16位存放在dx中
获取字符串长度
string db '你的字' len_string equ $ - string
$就是当前地址,$-string 就是当前地址减去string的初始地址,即可得到string的长度。
总结
以上所述是小编给大家介绍的8086汇编语言nasm版本,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
相关推荐
-
8086汇编开发环境搭建和Debug模式介绍(图文详解)
1. 8086汇编开发环境搭建 在上篇博客中简单的介绍了8086汇编语言.工欲善其事,必先利其器,在8086汇编语言正式开始学习之前,先介绍一下如何搭建8086汇编的开发环境. 汇编语言设计之初是用于在没有操作系统的裸机上直接操作硬件的,但对于大部分人来说,在8086裸机上直接进行编程将会面临各种困难.好在我们可以使用软件模拟器来模拟硬件进行8086的学习实践.在<汇编语言>中作者推荐通过windows环境下的masm和debug进行学习. masm介绍: masm是一款DOS下的汇编工具包,
-
Windows10下利用DOSBOX和MASM32搭建汇编语言开发环境
1 工具准备 1)下载DOSBOX 工具介绍:DOSBox 是一个 DOS 模拟程序,由于它采用的是 SDL 库,所以可以很方便的移植到其他的平台.目前,DOSBox 已经支持在 Windows.Linux.Mac OS X.BeOS .palmOS.Android .webOS.os/2等系统中运行.不少DOS下的游戏都可以直接在该平台上运行. 工具官网:http://www.dosbox.com/ 项目主页:http://sourceforge.net/projects/dosbox/ 下载
-
汇编语言lea指令使用方法解析
这篇文章主要介绍了汇编语言lea指令使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 lea指令变种(按大小分类): leaw #2个字节 leal #4个字节 leaq #8个字节 lea的用法: leaq a(b, c, d), %rax 首先lea指令是mov指令的变种,据说,lea指令是x86体系结构中,是一条最古老但是从某个方面来讲又是最神奇的指令. 表面上看,它做的事情非常简单,根据括号里的源操作数来计算地址,然后把地址加
-
汇编语言之寄存器(详细介绍)
1.寄存器 32位寄存器有16个,分别是: 4个数据寄存器(EAX.EBX.ECX.EDX). 2个变址和指针寄存器(ESI和EDI):2个指针寄存器(ESP和EBP). 6个段寄存器(ES.CS.SS.DS.FS.GS). 1个指令指针寄存器(EIP):1个标志寄存器(EFlags). 2.数据寄存器 数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间. 32位CPU有4个32位通用寄存器:EAX.EBX.ECX和EDX.对低16位数据的取存,不会影
-
汇编语言AAD,DAA,DAS用法解析
这篇文章主要介绍了汇编语言AAD,DAA,DAS用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 AAD 为下面的除法做准备 ,把AL 和 AH 两个单BCD码组成一个十进制数 1.AAD(调整除) 5.2该指令是在作除法前用于调整寄存器AH和AL之值,它是把二个寄存器中单BCD码组成一个十进制数值,其调整规则如下: AL←AH*10+AL,AH←0 受影响的标志位:PF.SF和ZF(AF.CF和OF等都是无定义) MOV AX, 050
-
8086汇编语言nasm版本
实模式和保护模式 在计算机上面,实模式存在的时间非常之短,所以一般我们是感觉不到它的存在的.CPU复位(reset)或加电(power on)的时候就是以实模式启动,在这个时候处理器以实模式工作,不能实现权限分级,也不能访问20位以上的地址线,也就是只能访问1M内存.之后一般就加载操作系统模块,进入保护模式 从显示字符串开始 屏幕有 25列X80行 列和行从0开始计数 显存地址空间: 0xB8000~0xBFFFF 屏幕上的每个字符对应着显存中的两个连续字节,前一个是字符的ASCII代码,后面是
-
汇编语言超浓缩教程
所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样).某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了.为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ--).但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP.WINRAR-依次压迫,嘿嘿!
-
汇编语言入门教程(这一篇足矣)
汇编语言是一种最低级.最古老.不具有移植性的编程语言,它能够直接访问计算机硬件,所以执行效率极高,占用资源极少,一般用于嵌入式设备.驱动程序.实时应用.核心算法等. 汇编语言的缺点是开发周期特别长,实现一个简单的功能都非常麻烦,已经很少用来编写应用程序了. 1 本讲座以汇编初学者或对汇编一点也不了解的读者为对象,汇编高手不属于该范围,但强烈建议高手指导并增补.修改本文. 2 任何读者可以跟此贴,提出疑问,或解答其中的问题,但对于所有跟贴,水贴.内容有错.毫不相干贴将直接删除,有意义的贴可能会合并
-
CentOS 7.x编译安装Nginx1.10.3+MySQL5.7.16+PHP5.2 5.3 5.4 5.5 5.6 7.0 7.1多版本全能环境
前传: 1.CentOS 7.3.1611系统安装配置图解教程 http://www.osyunwei.com/archives/10003.html 2.CentOS服务器初始化设置 http://www.osyunwei.com/archives/9034.html 准备篇 一.防火墙配置 CentOS 7.x默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop firewalld.service #停止firew
-
Spring Boot整合ElasticSearch实现多版本兼容的方法详解
前言 在上一篇学习SpringBoot中,整合了Mybatis.Druid和PageHelper并实现了多数据源的操作.本篇主要是介绍和使用目前最火的搜索引擎ElastiSearch,并和SpringBoot进行结合使用. ElasticSearch介绍 ElasticSearch是一个基于Lucene的搜索服务器,其实就是对Lucene进行封装,提供了 REST API 的操作接口 ElasticSearch作为一个高度可拓展的开源全文搜索和分析引擎,可用于快速地对大数据进行存储,搜索和分析.
-
Linux查看PCIe版本及速率的方法
PCIE有四种不同的规格,通过下图来了解下PCIE的其中2种规格 查看主板上的PCI插槽 # dmidecode | grep --color "PCI" 不同PCIe版本对应的传输速率如下: 传输速率为每秒传输量GT/s,而不是每秒位数Gbps,因为传输量包括不提供额外吞吐量的开销位: 比如PCIe 1.x和PCIe 2.x使用8b/10b编码方案,导致占用了20% (= 2/10)的原始信道带宽. GT/s -- Giga transation per second (千兆传输/秒
-
汇编语言之寄存器详解
上图是cpu中三个组成部分:寄存器 运算器 控制器.其中寄存器是cpu中程序员用指令读取的唯一部件(调剂界面中的 寄存器窗口).如果是16位cpu,就是处理,传输,暂时存储的数据长度都是16位.所以16位的cpu,寄存器也是16位.<汇编语言>这本书中使用的是16位寄存器位例子来讲的,所以下面的内容也都是16位寄存器的. ps:查看处理器型号以及几核cpu,我现在的电脑4核64位 寄存器名字 16位的寄存器有:AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW
-
什么是汇编语言
汇编语言(assembly language)是一种用于电子计算机.微处理器.微控制器或其他可编程器件的低级语言,亦称为符号语言.在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址.在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令.普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植. 许多汇编程序为程序开发.汇编控制.辅助调试提供了额外的支持机制.有
随机推荐
- PERL 正则表达式详细说明
- Python函数学习笔记
- asp.net 图片的读写入库实现代码
- js实现select下拉框菜单
- C#使用jQuery实现无刷新评论提交的方法
- js查找节点的方法小结
- 在JavaScript中监听IME键盘输入事件
- JS限定手机版中图片大小随分辨率自动调整的方法
- Powershell实现从注册表获取本地关联文件的扩展名
- bootstrap组件之导航组件使用方法
- 编写简单的jQuery提示插件
- jQuery实现弹幕效果
- jQuery焦点图切换特效代码分享
- Android 检查更新、下载、安装功能的实现
- Linux中BSD套接口开发的基础介绍
- Android中pendingIntent与Intent的深入分析
- MySQL 5.0触发器参考教程第1/4页
- Laravel5权限管理方法详解
- 利用Catalyst交换机处理蠕虫病毒的入侵
- golang线程安全的map实现