汇编学习入门之第一个汇编程序

经过理论铺垫,现在正式进入语言实际操作和效果展示,该篇文章主要是介绍常用命令与命令的惯常用法;编写、编译一般的汇编程序;阅读机器码。
注意:本文汇编程序是x86环境下的,移植其他平台可能产生错误。*一、常用的命令
汇编代码主要由助记符和操作数组成,格式通常如下
例:
mov ax,0x10
上述例子只是一个简单的举例,事实上,mov指令还有能在多种用法,如下图所示。
将上述上图抽象出来便有以下关系:
mov 目的,源
既:
mov reg/mem,reg/mem/imm
其中:
reg 寄存器
mem 内存
imm立即数
又可以在名称后面跟数字表示位数,如imm32 就是可以操作32位数据。
必须明确,源操作数位数必须与目的操作数位数相同。
注:学习更多指令语法参考文末百度云书籍。
对机器而言这种编码组织形式是高效的,作为人类这种高效无疑增加了复杂性。
现代不是计算机刚问世的时期,现代工程师要追求最优解。
经过工程师迭代,在汇编语言基础上开发出来的编译器普遍具有伪指令、标号等功能以便源文件具有较高可读性。
例:
start:;标号声明该段代码代号,标号不会参与编译过程
mov ax,0x10 ;0x10复制给ax寄存器 mov cx,0x00 ;0x00复制给cx寄存器 add ax,cx ;ax寄存器值加上cx寄存器值将上述程序存放起来,命名为10_01.asm,.asm为汇编源文件,使用nasm编译。
编译命令:nasm -f bin .\\10_01.asm -o .\\10_01.bin
其中:
nasm 执行程序
10_01.asm 源文件
-f bin 指定输出文件格式为.bin
注:更多指令语法参考文末百度云书籍。
编译后将.bin文件打开得到如下图数据:
为研究方便,再对输出文件进行反汇编。
将.bin文件在0x7c00处反编译
使用命令:ndisasm -o 0x7c00 .\\10_01.bin >> .\\10_01-1.asm
得到:
00007c00b81000 mov ax,0x10
00007c03b90000 mov cx,0x0
00007c06 01c8 add ax,cx
现在所有东西都一目了然,在.bin文件中:
b8为mov ax指令所对应的机器码,因为ax宽16位,而0x10为8位所以补两个0凑够16位,x86立即数先低位后高位存放0010在内存中便是1000;b9同理。
01为add指令机器码,c8代表ax,cx两个寄存器值相加。
二、helloworld现在了解了简单的汇编语言,我们必须要查看一下效果。
为此,helloworld虽迟但到!
1、建立helloworld.asm
2、输入以下指令
org 07c00h ;程序起始位07c00h
mov ax,cs mov ds,ax mov es,ax call dispstr jmp $ ;死循环dispstr:;字符串调用函数
mov ax,bootmessage mov bp,ax ;串地址 mov cx,11 ;串长度 mov ax,01301h ;ah = 13,al = 01h mov bx,000ah ;黑底绿字 mov dl,0 int 10h ;10h号中断 ret bootmessage:db helloworld! times 510 - ($-$$)db 0;生成一串512字节二进制代码
dw 0xaa55 ;结束标志3、编译
nasm -f bin .\\helloworld.asm -o .\\helloworld.bin
4、效果
上述源码看客们可以先行阅读,下一篇推文对源码进行解析。
参考文献:
[1]nasm.[eb/ol]. http://www.bytekits.com/nasm/intro.html.
[2] 蹦蹦骑士.[eb/ol].https://www.cnblogs.com/alwaysking/p/7623781.html#:~:text=%e7%bc%96%e
[3] 万一.[eb/ol]. https://www.cnblogs.com/del/archive/2010/03/16/1687665.html.-.
[4]intel.[eb/ol]. https://css.csail.mit.edu/6.858/2015/readings/i386.pdf.-.

MACOM宣布完成对Wolfspeed射频业务的收购
交流转直流智能家电IC220V降压5V120mA电源芯片PM1132
AirPods Max在苹果天猫官方旗舰店销量火爆
迪谱诊断获第十届中国创新创业大赛生物医药全国赛“优秀企业”奖
BMS电池管理系统的智能守护者:YSO110TR高精度全温范围内稳定
汇编学习入门之第一个汇编程序
如何通过实现高效的室内定位追踪
户外便携式大容量移动电源的选购指南及必备知识
瑞萨电子超低功耗32位微控制器V850ES/Jx3系列
判别三极管的好坏三个必须要掌握的“判别方法”
2021年新建5G基站或超百万
基于云的语音识别增长推动嵌入式语音技术
火眼金睛识别笔记本的“刷号机”
电力无线通信组网的技术及应用
5G前传进入网络2.0时代
基于TMP75的具有 I2C/SMBus 接口的 ±1°C 温度传感器,采用工业标准 LM75 尺寸和引脚
Netsol并口STT-MRAM非易失存储S3R8016
相控阵天线是全向天线吗 相控阵天线应用领域
小米6最新消息:小米6接连秒售罄的背后究竟是为什么?
利用图神经网络让谷歌地图实现新突破