eryar

PipeCAD - Plant Piping Design Software.
RvmTranslator - Translate AVEVA RVM to OBJ, glTF, etc.
posts - 603, comments - 590, trackbacks - 0, articles - 0

The First ASM Program

Posted on 2016-04-13 23:31 eryar 阅读(1371) 评论(2)  编辑 收藏 引用

The First ASM Program

eryar@163.com

1.Introduction

以前都是在Debug程序中写一些指令来测试,现在可以开始编写完整的汇编语言程序,用编译和连接程序将汇编代码编译连接成可执行程序。对于从TC2.0学习C语言的人来说,编译连接汇编代码与C代码很相似,有点亲切感。都要经历编写源码,然后编译源码生成目标OBJ文件;再通过连接将OBJ连接成可执行程序。

用汇编语言写的源程序,包含伪指令和汇编指令,其中汇编指令组成了最终由计算机执行的程序,而伪指令由编译器来处理。以后可以将源码文件中的由计算机执行处理的指令或数据称为程序。程序最先以汇编指令的形式存在源程序中,经编译连接后转变成机器码,存储在可执行文件中。

一段简单的汇编源程序如下:

assume cs:codesg

codesg segment
    mov ax
,0123h
    mov bx
,0456h
    add ax
,bx
    add ax
,ax,
    
    mov ax
,4c00h
    
int 21h
codesg ends

end

其中伪指令有:assume, segment, ends, end。在源码中除了汇编指令和伪指令外,还有一些标号,如codesg,一个标号指代了一个地址。比如codesg在segment前面,作为一个段的名称,这个段的名称最终将被编译连接程序处理为一个段的段地址。

源程序是由段组成的。我们可以在 这些段中存放代码、数据或将某个段当作栈空间使用。通过在segment前面加个标号表示段的名字,段结束加上ends。在段中可以写上汇编指令。end表示程序的结束。要把一个段当作代码来使用,需要这个段与CS寄存器建立关系,通过assume来实现。

程序运行结束都要交出控制权,汇编程序中通过指令mov ax,4c00h和int 21h来实现。

2.Edit Code

可以在记事本之类的工具编写源码,如下图所示:

wps_clip_image-32643

将上述源码保存为test.asm,并将其放到MASM文件夹中。

3. Compile

编译使用Microsoft的MASM5.0汇编编译器,程序名为masm.exe。

wps_clip_image-14263

编译成功后,会生成test.obj目标文件。也可以用简化的方式进行编译,即在masm后加上源码名后再加个分号即可以跳过中间文件的生成。

4. Link

通过连接将目标文件连接后生成可执行文件。连接使用的程序名为link.exe。

wps_clip_image-20370

连接需要指定目标文件名。也可以用简化的方式来对目标文件进行连接。

5. Execute

连接成功后就生成一个可执行文件test.exe了。在命令窗口中直接输入可执行文件的名字即可以运行程序了。

wps_clip_image-1809

程序是运行了,只不过没有在屏幕上输出什么内容。

6. Debug

可以用Debug来跟踪程序的运行过程,就像在Visual Studio中使用debug一样,一步一步地来查看程序的运行情况。

wps_clip_image-25107

通过U命令可以查看机器码对应的汇编指令。然后用T命令来一步一步地执行程序,从而可以观察程序运行过程中CPU相关寄存器中的变化。

Feedback

# re: The First ASM Program  回复  更多评论   

2016-04-16 09:35 by Alphamolasses
以后长期干活推荐Nasm,功能特性比Masm要强一点。

# re: The First ASM Program  回复  更多评论   

2016-04-16 10:24 by eryar
@Alphamolasses
这个工具不错,

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理