汇编语言学习五
来源:互联网 发布:阿里旺旺mac最新版本 编辑:程序博客网 时间:2024/05/02 15:53
从一个例子简单介绍一下汇编程序的结构,可能有些费话,稍微说一下吧.
; Example assembly language program -- adds two numbers
; Author: R. Detmer
; Date: revised 7/97
.386
.MODEL FLAT
ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD
INCLUDE io.h ; header file for input/output
cr EQU 0dh ; carriage return character
Lf EQU 0ah ; line feed
.STACK 4096 ; reserve 4096-byte stack
.DATA ; reserve storage for data
number1 DWORD ?
number2 DWORD ?
prompt1 BYTE "Enter first number: ", 0
prompt2 BYTE "Enter second number: ", 0
string BYTE 40 DUP (?)
label1 BYTE cr, Lf, "The sum is "
sum BYTE 11 DUP (?)
BYTE cr, Lf, 0
.CODE ; start of main program code
_start:
output prompt1 ; prompt for first number
input string, 40 ; read ASCII characters
atod string ; convert to integer
mov number1, eax ; store in memory
output prompt2 ; repeat for second number
input string, 40
atod string
mov number2, eax
mov eax, number1 ; first number to EAX
add eax, number2 ; add second number
dtoa sum, eax ; convert to ASCII characters
output label1 ; output label and sum
INVOKE ExitProcess, 0 ; exit with return code 0
PUBLIC _start ; make entry point public
END ; end of source code
这是一个把两个数相加的例子,
先看开头
.386
.MODEL FLAT
如果没有指定.386。MASM会接受8086/8088指令集的指令,当指定.386的时候,它还可以
执行80186,80286,80386指令集的指定,当然也可以指定.486,.586使用更大的指令集。
masm6.1的版本至少要.386的指令集。
ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD
说明从外部引用一个函数名为ExitProcess ,它有一个参数名为dwExitCode.
INCLUDE io.h
它使编译器将io.h复制到此文件中,当需要编译这个文件的时候。
cr EQU 0dh ; carriage return character
Lf EQU 0ah ; linefeed character
这个有点像C++中的define,equ定义一个符号代表后面的字符。
.data
定义数据区,里面可以有未初始化变量或初始化变量。同时又是会见到.data?
和.data并存的情况,此时.data?中一般为未初始化变量。
number1 DWORD ?
number2 DWORD ?
prompt1 BYTE "Enter first number: ", 0
prompt2 BYTE "Enter second number: ", 0
前两个为没有初值得变量,但内存已经分配,为DWORD型。后面两个是BYTE型的数组或者
说字符串。
string BYTE 40 DUP (?)
这句用符号dup表明定义一个大小为40的类型为BYTE的数组。
.code
表示开始代码段落。
_start:
表示程序的开始,我们可以在编译的时候用entry选项指定程序的入口,不过习惯上使
用_start。
PUBLIC _start
一般名字只在文件内部可见,不过要使外部的文件能够看到这个函数
END
表示源程序内容物理结束,后面不会再有程序代码。
- 汇编语言学习笔记(五)
- 汇编语言学习五
- 《汇编语言》学习(五)循环
- 王爽之《汇编语言》学习重点五
- 王爽之《汇编语言》学习重点五
- 汇编语言学习笔记(五)bx和loop指令
- 王爽汇编语言学习笔记(五)--loop与[bx]
- 汇编语言程序设计(五)
- x86汇编语言(五)
- 汇编语言-学习
- 学习汇编语言
- 学习汇编语言!
- 学习汇编语言
- 汇编语言学习
- 汇编语言学习
- 学习:汇编语言
- 汇编语言学习
- 汇编语言学习笔记(一):汇编语言基础知识
- TCP/IP 之TCP协议(5):拥塞控制
- dwr配置篇之web.xml
- 【转】CListCtrl使用技巧摘抄
- CSDN网站使用了哪些技术?
- dwr配置文件dwr.xml详解
- 汇编语言学习五
- java nio 之MappedByteBuffer
- OperateFile
- 抽象类和接口的区别
- ISO9000认证申请条件
- C#多线程学习(二) 如何操纵一个线程
- 我的首次
- 一个正确的c语言链表代码(中间也有些bug)
- PKU 2513 Colored Sticks - Trie树+并查集+欧拉通路