经过前面的一段学习,现在终于进入到实战阶段了,这是我们要写的第一个汇编程序,在屏幕上显示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相关推荐

  1. macOS上的汇编入门(五)——第一个汇编程序

    通过前几篇文章,我们逐步建立了学习汇编语言之前需要的基础知识.接下来,在这篇文章中,我们开始编写我们的第一个汇编程序了. 编辑器,汇编器与链接器 工欲善其事,必先利其器.我们编写汇编语言,至少需要编辑 ...

  2. 在Linux下运行你的第一个汇编程序

    在Linux下运行你的第一个汇编程序 汇编语言对于大多数程序员来说都是进而远之的,原因当然是汇编语言晦涩难懂,各种指令搞得人头疼,不过汇编语言适当了解一些还是蛮有意思的,今天带大家在Linux上运行第 ...

  3. 编写你的第一个汇编程序

    文章目录 前言 第一个汇编程序 新建工程 配置芯片 编辑汇编程序 完成程序烧录 LED闪烁 总结 前言 本篇文章能帮助一个汇编的新手小白编写第一个汇编程序,本篇文章一步一步教你完成第一个汇编程序,并给 ...

  4. 汇编语言复习摘要四——第一个汇编程序

    1. 程序执行流程:简单说下,编写汇编程序->对程序进行编译和链接(注意,是两个动作)->执行可执行文件.操作系统将依照可执行文件中的描述信息,将可执行文件中的机器码和数据加载入内存,并进 ...

  5. 【ARM】在Uboot中运行第一个汇编程序

    00. 目录 文章目录 00. 目录 01. 汇编程序 02. 编译 03. 下载执行 04. 文件对比 05. 程序示例二 06. 附录 01. 汇编程序 汇编程序 .section .rodata ...

  6. 汇编语言学习——第四章 第一个汇编程序

    1.一个汇编语言程序从写出到最终执行的简要过程: 编写--> 编译,链接 --> 执行 2.编译,链接 使用汇编语言编译程序(MASM.EXE)对源程序文件中的源程序进行编译,产生目标文件 ...

  7. vscode较详细注释的汇编语言hello world 输出程序,第一个汇编程序

    输出hello world,经典且不失优雅的操作. 在写之前先了解一些知识,会编译连接运行.asm文件 然后看一下汇编程序基本结构,有一点点matlab的感觉 代码段,数据段,附加数据段等. 注释符是 ...

  8. 0x01第一个汇编程序

    ;将由text db 10,20,30,40定义的4个数相加,并输出其和.  .386    ;指明指令集  .model flat,stdcall ;平坦模式,函数右边的参数先入栈  option ...

  9. 用Visual Studio 2008编写Win32汇编程序

    用Visual Studio 2008编写Win32汇编程序 Binhua Liu 本文分为以下三个部分: 1)用Visual Studio2008建立一个汇编控制台工程 2)汇编程序模板 3)汇编编 ...

最新文章

  1. Kobject结构体分析
  2. 被动信息收集之RECON-NG(七)
  3. 97 岁诺奖得主的励志人生:本科学文学,博士转物理,54 岁才开始锂电池研究...
  4. python 底层原理processpoolexecutor_python 多进程并行编程 ProcessPoolExecutor的实现
  5. vlookup两个条件匹配_vlookup,你还是只会基础的单条件查找?
  6. 【STM32】点灯仪式
  7. Python DES
  8. 教你开发Jquery插件-Jquery插件开发教程
  9. VB 设置ListView中指定一行的背景颜色
  10. 如何实现一个遵从设计原则的积分兑换系统2
  11. Ruby on Rails -跑起来吧hello World!
  12. 【集群仿真】基于matlab固定翼无人机集群仿真演示平台【含Matlab源码 1497期】
  13. 北航计算机组成原理课程设计-2020秋 PreProject-Logisim-Logisim组合逻辑电路
  14. 西门子阀门定位器6DR5011-0NG11-0AA0
  15. Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes解决方法
  16. 如何从Excel文件创建在线预算报告
  17. 【架构】1366- 如何画出一张优秀的架构图
  18. 容联云通讯_提供网络通话、视频通话、视频会议、云呼叫中心、IM等融合通讯能力开放平台。...
  19. oracle连接另外一个oracle,Oracle 连接 另一个Oracle数据库 服务器连接
  20. 工作流相关讲解 转载

热门文章

  1. 出现network boot from intel e1000问题的解决办法
  2. FCPX:镜头故障抖动效果TOBK TWITCH for Mac
  3. java jsf教程_JSF入门教程
  4. 带约束的多目标优化进化算法综述
  5. 为什么 128 KB 的魂斗罗可以实现那么长的剧情?
  6. tableau连接不上oracle,Oracle
  7. cpu功耗排行_目前较低功耗的intel系cpu求推荐?
  8. Omnibus GitLab 使用说明
  9. ASO代理业务浅析(一)aso服务商
  10. 三相永磁同步电机PMSM仿真 simulink仿真 永磁同步电机仿真,PI调节器