7-第一个汇编程序hello world
经过前面的一段学习,现在终于进入到实战阶段了,这是我们要写的第一个汇编程序,在屏幕上显示hello world字符。
访问显存和访问内存一样,需要用到逻辑地址,即“段地址:偏移地址”的形式。我们知道文本模式下起始物理地址为0xB8000(即显存的起始地址),因此我们可以把0xB8000看成是段地址0xB800,偏移地址为0x0000到0xFFFF区域。
注意,这里我们使用ES寄存器指向显存所在段,格式如下:
mov ax,0xB800
mov es,ax
例如,下面这种格式是错误的:
mov es,0xB800 ;8086CPU不允许这种格式
接下来就是如何用汇编程序显示字符了,为了方便,大多数汇编语言允许用字符来代替ASCII码表的数值,例如:
mov byte [es:0x0000],0x49 ;大写字母I的ASCII码值
我们直接使用字符”I”代替ASCII码值
mov byte [es:0x0000],'I'
字符I用单引号括起来,这样程序在编译阶段,汇编语言编译器会将字符I替换成ASCII码值。
完整的汇编代码如下:
;文件名: 001.asm;说明: 在屏幕上输出:hello world字符;初始化段寄存器ES,
mov ax,0xB800
mov es,ax ;
mov byte [es:0x0000],'h'
;0x07表示显示为黑底白字,无闪烁,无亮
mov byte [es:0x0001],0x07 mov byte [es:0x0002],'e'
mov byte [es:0x0003],0x07 mov byte [es:0x0004],'l'
mov byte [es:0x0005],0x07 mov byte [es:0x0006],'l'
mov byte [es:0x0007],0x07 mov byte [es:0x0008],'o'
mov byte [es:0x0009],0x07 mov byte [es:0x000A],' '
mov byte [es:0x000B],0x07 mov byte [es:0x000C],'w'
mov byte [es:0x000D],0x07 mov byte [es:0x000E],'o'
mov byte [es:0x000F],0x07 mov byte [es:0x0010],'r'
mov byte [es:0x0011],0x07 mov byte [es:0x0012],'l'
mov byte [es:0x0013],0x07 mov byte [es:0x0014],'d'
mov byte [es:0x0015],0x07 ;填充数据
times 510-($-$$) db 0x00;在最后的位置写入标志
db 0x55,0xAA
然后按下Ctrl + 1进行编译,再按Ctrl + 2写入主引导扇区(即0扇区)
然后再点击调试,如下图所示:
我们可以看到在显存的0xB800起始地址中,存储的都是hello world字符的数据是ASCII码值,也就是说汇编程序在编译时把字符都转换成对应的ASCII码值了,因为计算机是不认识字符的,它只认识字符对应的ASCII码值。
以上是我在看《x86汇编语言:从实模式到保护模式》做的一些笔记,希望能对正在学习x8086的同学有所帮助,对于想要深入学习x86汇编语言的同学,我的建议是可以看书学习。
7-第一个汇编程序hello world相关推荐
- macOS上的汇编入门(五)——第一个汇编程序
通过前几篇文章,我们逐步建立了学习汇编语言之前需要的基础知识.接下来,在这篇文章中,我们开始编写我们的第一个汇编程序了. 编辑器,汇编器与链接器 工欲善其事,必先利其器.我们编写汇编语言,至少需要编辑 ...
- 在Linux下运行你的第一个汇编程序
在Linux下运行你的第一个汇编程序 汇编语言对于大多数程序员来说都是进而远之的,原因当然是汇编语言晦涩难懂,各种指令搞得人头疼,不过汇编语言适当了解一些还是蛮有意思的,今天带大家在Linux上运行第 ...
- 编写你的第一个汇编程序
文章目录 前言 第一个汇编程序 新建工程 配置芯片 编辑汇编程序 完成程序烧录 LED闪烁 总结 前言 本篇文章能帮助一个汇编的新手小白编写第一个汇编程序,本篇文章一步一步教你完成第一个汇编程序,并给 ...
- 汇编语言复习摘要四——第一个汇编程序
1. 程序执行流程:简单说下,编写汇编程序->对程序进行编译和链接(注意,是两个动作)->执行可执行文件.操作系统将依照可执行文件中的描述信息,将可执行文件中的机器码和数据加载入内存,并进 ...
- 【ARM】在Uboot中运行第一个汇编程序
00. 目录 文章目录 00. 目录 01. 汇编程序 02. 编译 03. 下载执行 04. 文件对比 05. 程序示例二 06. 附录 01. 汇编程序 汇编程序 .section .rodata ...
- 汇编语言学习——第四章 第一个汇编程序
1.一个汇编语言程序从写出到最终执行的简要过程: 编写--> 编译,链接 --> 执行 2.编译,链接 使用汇编语言编译程序(MASM.EXE)对源程序文件中的源程序进行编译,产生目标文件 ...
- vscode较详细注释的汇编语言hello world 输出程序,第一个汇编程序
输出hello world,经典且不失优雅的操作. 在写之前先了解一些知识,会编译连接运行.asm文件 然后看一下汇编程序基本结构,有一点点matlab的感觉 代码段,数据段,附加数据段等. 注释符是 ...
- 0x01第一个汇编程序
;将由text db 10,20,30,40定义的4个数相加,并输出其和. .386 ;指明指令集 .model flat,stdcall ;平坦模式,函数右边的参数先入栈 option ...
- 用Visual Studio 2008编写Win32汇编程序
用Visual Studio 2008编写Win32汇编程序 Binhua Liu 本文分为以下三个部分: 1)用Visual Studio2008建立一个汇编控制台工程 2)汇编程序模板 3)汇编编 ...
最新文章
- Kobject结构体分析
- 被动信息收集之RECON-NG(七)
- 97 岁诺奖得主的励志人生:本科学文学,博士转物理,54 岁才开始锂电池研究...
- python 底层原理processpoolexecutor_python 多进程并行编程 ProcessPoolExecutor的实现
- vlookup两个条件匹配_vlookup,你还是只会基础的单条件查找?
- 【STM32】点灯仪式
- Python DES
- 教你开发Jquery插件-Jquery插件开发教程
- VB 设置ListView中指定一行的背景颜色
- 如何实现一个遵从设计原则的积分兑换系统2
- Ruby on Rails -跑起来吧hello World!
- 【集群仿真】基于matlab固定翼无人机集群仿真演示平台【含Matlab源码 1497期】
- 北航计算机组成原理课程设计-2020秋 PreProject-Logisim-Logisim组合逻辑电路
- 西门子阀门定位器6DR5011-0NG11-0AA0
- Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes解决方法
- 如何从Excel文件创建在线预算报告
- 【架构】1366- 如何画出一张优秀的架构图
- 容联云通讯_提供网络通话、视频通话、视频会议、云呼叫中心、IM等融合通讯能力开放平台。...
- oracle连接另外一个oracle,Oracle 连接 另一个Oracle数据库 服务器连接
- 工作流相关讲解 转载