经过前面的一段学习,现在终于进入到实战阶段了,这是我们要写的第一个汇编程序,在屏幕上显示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. shell脚本中的YYYY-MM-DD格式日期
  2. 构建Flex数据服务程序
  3. uniapp怎么引入css_Uniapp怎么引入外部js
  4. 用“连接”勾勒角色:《死亡搁浅》亡人的设计及其背后的故事谜题
  5. Micropython 如何用Turnipbit做一个自动浇水装置
  6. 固定 顶部_抗拉固定球铰支座优点与施工步骤
  7. 【价格预测】基于matlab粒子群算法黄金价格预测【含Matlab源码 591期】
  8. cxf超时设置不起效_jmeter集合点设置(十三)
  9. 计算机软件相关的优秀基金,计算机软件研究所
  10. 数学分析教程(科大)——6.1笔记+习题
  11. 【vbers】ibv_post_send|IBV_SEND_SOLICITED|RDMA
  12. python 安卓平板摄像头_python把手机摄像头当作电脑摄像头
  13. 基于单片机的八层电梯设计
  14. 信源编码技术-作业1-清浊音分析
  15. 论文阅读ICLR2020《ADAPTIVE STRUCTURAL FINGERPRINTS FOR GRAPH ATTENTION NETWORKS》
  16. C++中的var类型
  17. 如何获取系统下目录的文件系统类型
  18. VNC树莓派无法连接
  19. Unity粒子系统参数解析(一)
  20. 微信自动回复小程序(有手就行)

热门文章

  1. 高等数学(拉格朗日乘子法):NOI 2012 骑行川藏
  2. 计算机专业云平台管理试题,练习题云平台/计算机软考考试试题-考试系统
  3. JSF 标签大全(非常详细 有例子)
  4. java jsf_eclipse搭建JSF简单示例的教程(亲测)
  5. springboot整合autopoi-web文件导出Excel,使用注解配置一多
  6. 【人工智能数学基础(三)】数学优化
  7. 根据网址搜索类似的网站
  8. javac ‘javac‘ 不是内部或外部命令,也不是可运行的程序 的解决办法
  9. STM32 CubeIDE(九)串口通讯
  10. 【STL详解】stack