汇编(整理)

汇编语言是一种最接近机器语言的编程语言。

 

汇编学习研究或者开发实践

 

选一个平台,比如是在给哪个目标平台上开发汇编程序,如x86,我们在开始学习的时候,通常将8086或8088作为学习的目标平台。老得掉渣的平台,不过我们还是可以买得到这种开发板的。这种开发板已经基本没什么实用了,但作为学习用已经够用了。

 

我们比较常见的是x86,所以选择x86开始是一个比较容易的途径。

 

另外是汇编编译器

 

常用汇编语言编译器,如nasm,as、gcc等, 以及windows平台下的MASM。汇编语言也需要经过编译成obj文件,然后在链接成可执行文件。

扫描二维码关注公众号,回复: 6660238 查看本文章

 

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

运行后,这里打印的不是'QQ', 而是提示输入,输入'Q'后,又打印了一个'Q'。

 

DOS实模式

 

保护模式

 

C/C++:内嵌汇编可参考另一篇文章:https://lobin.iteye.com/blog/1585647

1、http://www.ref.x86asm.net/

2、https://www.felixcloutier.com/x86/

猜你喜欢

转载自lobin.iteye.com/blog/2442219