汇编语言是一种最接近机器语言的编程语言。
汇编学习研究或者开发实践
选一个平台,比如是在给哪个目标平台上开发汇编程序,如x86,我们在开始学习的时候,通常将8086或8088作为学习的目标平台。老得掉渣的平台,不过我们还是可以买得到这种开发板的。这种开发板已经基本没什么实用了,但作为学习用已经够用了。
我们比较常见的是x86,所以选择x86开始是一个比较容易的途径。
另外是汇编编译器
常用汇编语言编译器,如nasm,as、gcc等, 以及windows平台下的MASM。汇编语言也需要经过编译成obj文件,然后在链接成可执行文件。
nasm下载地址:
https://www.nasm.us/pub/nasm/releasebuilds/2.00/
as可以查看下帮助信息:
>as --help
再一个就是微机原理、计算机体系结构、目标平台(如x86)的指令集等。
最后最好有个方便开发的系统,如windows,linux下。
........
调用
中断
中断分为硬件中断和软件中断,其中软件中断不可屏蔽,软件中断分为BIOS中断(10H ~ 1FH),DOS中断(20H ~ 3FH),以及 由系统或应用程序设置开发的自由中断(40H ~ FFH)。硬件中断又分外部中断和内部中断,其中内部中断不可屏蔽,外部中断可屏蔽。
按照中断是否可屏蔽,中断可分为可屏蔽中断和不可屏蔽中断(NMI, Non Maskable Interrupt)。
在32位windows下(保护模式)
dosbox:
安装
DOSBox0.74-2-win32-installer.exe
MASM Link16
以下例子,调用了3次中断:
_TEXT SEGMENT ; 键盘输入一个字符(AH=1) ; 输出显示一个字符(输入的字符) _main PROC NEAR ; 键盘输入一个字符(AH=1) MOV AH,1 INT 21H ; 输出显示一个字符(输入的字符) MOV DL, AL MOV AH, 02H INT 21H ; RETURN DOS MOV AH,4CH INT 21H _main ENDP _TEXT ENDS END
编译:
>ml /c inttest3.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997. All rights reserved.
Assembling: inttest3.asm
链接:
>link16 /ENTRY:main inttest3.obj
Microsoft (R) Segmented Executable Linker Version 5.60.339 Dec 5 1994
Copyright (C) Microsoft Corp 1984-1993. All rights reserved.
LINK : warning L4017: /ENTRY : unrecognized option name; option ignored
Run File [inttest3.exe]:
List File [nul.map]:
Libraries [.lib]:
Definitions File [nul.def]:
LINK : warning L4021: no stack segment
LINK : warning L4038: program has no starting address
运行:
>.\inttest3.exe
运行后,这里打印的不是'QQ', 而是提示输入,输入'Q'后,又打印了一个'Q'。
DOS实模式
保护模式
C/C++:内嵌汇编可参考另一篇文章:https://lobin.iteye.com/blog/1585647。