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

电子说

1.2w人已加入

描述

经过理论铺垫,现在正式进入语言实际操作和效果展示,该篇文章主要是介绍常用命令与命令的惯常用法;编写、编译一般的汇编程序;阅读机器码。

  • 注意:本文汇编程序是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.-.

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分