DJ13-1汇编语言程序设计-1-创新互联

目录

成都创新互联网络公司拥有10多年的成都网站开发建设经验,上1000+客户的共同信赖。提供成都做网站、网站制作、成都外贸网站建设、网站开发、网站定制、卖友情链接、建网站、网站搭建、成都响应式网站建设公司、网页设计师打造企业风格,提供周到的售前咨询和贴心的售后服务

一、基本概念

1. 机器语言(machine language)

2. 汇编语言(assembly language)

3. 汇编语言源程序

4. 汇编(assemble)

5. 汇编程序(assembler)

6. 宏汇编程序(MASM)

7. 高级语言(high level language)

8. 编译程序和解释程序

二、汇编语言源程序的结构

三、汇编语言语句类型及格式

1. 指令性语句格式

2. 指示性语句格式

四、数据项及表达式

1. 常量

2. 标号

3. 变量

4. 表达式


一、基本概念 1. 机器语言(machine language)

是用二进制码来表示指令和数据的语言,是计算机硬件系统唯一能够直接理解和执行的语言,具有执行速度快、占用内存少等优点。但是其不直观、不易理解和记忆,因此编写、阅读和修改程序都比较麻烦。

2. 汇编语言(assembly language)

弥补了机器语言的不足,它用指令助记符、符号地址、标号和伪指令等来书写程序。由于助记符接近于自然语言,因此与机器语言相比,它在程序的编写、阅读和修改方面都比较方便、不易出错,且执行速度和机器语言程序相同。

3. 汇编语言源程序

用汇编语言编写的程序称为汇编语言源程序。

4. 汇编(assemble)

由于计算机只能辨认和执行机器语言,因此必须将汇编语言源程序翻译成能够在计算机上执行的机器语言(称为目标代码),这个翻译的过程称为汇编。

5. 汇编程序(assembler)

完成汇编过程的系统程序叫作汇编程序。

6. 宏汇编程序(MASM)

是目前使用较多的汇编程序。

汇编语言和机器语言一样,都是面向具体机器的语言。也就是说,不同种类的 CPU 具有不同的汇编语言,互相之间不能通用。(由于不同种类的 CPU 的指令系统不同)

7. 高级语言(high level language)

与上述两种语言相比,高级语言的语句更接近人类语言,所以用高级语言编写的程序易读、易编。相对比较简短。它与具体的计算机无关,不受 CPU 类型的限制,通用性很强。

8. 编译程序和解释程序

用高级语言编写的源程序同样必须翻译成为机器代码计算机才能执行,完成这个翻译过程的系统软件称为编译程序或解释程序。

“汇编是从汇编语言到机器码的过程,编译是源代码 → 词法分析 → 语法分析 → 中间代码生成和优化 → 汇编代码 → 机器码的过程。有一些语言是解释执行,就转为对应虚拟机的字节码。”

汇编和编译具体指什么?有什么区别?icon-default.png?t=M85Bhttps://www.zhihu.com/question/388069555

二、汇编语言源程序的结构

例题

将数据段中两个字单元数据相加,结果存入附加段字单元中。

三、汇编语言语句类型及格式

汇编语言源程序语句:指令性语句、指示性语句。

① 指令性语句

是由指令系统中的指令助记符组成的语句,汇编后生成可被 CPU 执行的目标代码。

② 指示性语句

用于告诉汇编程序如何对源程序进行汇编,不生成可执行的目标代码,又称伪操作语句或伪指令。

加花括号的是可选项,可以有,也可以没有。

1. 指令性语句格式

{标号:}  {前缀}  操作码  {操作数,操作数}  {;注释}

对于标号,例如 L1:MOV ... ,L1 就是一个标号;

对于前缀,例如 REP、REPZ、REPNZ;

对于操作数,最多为双操作数,也可以没有操作数。

2. 指示性语句格式

{名字}  伪指令  操作数{,操作数,... }  {;注释}

对于名字,例如变量名、段名;

对于伪指令,用于告诉编译器如何进行编译;

对于操作数,至少要有一个,并可根据需要有多个。

四、数据项及表达式

各种形式的数据项最终还是会被还原成一个立即数。

1. 常量

(1)数字常量

二进制数:以字母 B 结尾,如 01001001B。

八进制数:以字母 Q 结尾,如 631Q。

十进制数:以字母 D 结尾或不加结尾。

十六进制数:以字母 H 结尾。

对于十六进制数,若以字母 A~F 开头,则在前面加一个数字 0,如 0FEH。

(2)字符串常量

字符串常量:用单引号括起来的一个或多个字符,其值为这些字符的 ASCII 码值。

汇编程序将其中的每一个字符分别翻译成对应的一个字节的 ASCII 码,如 'AB',汇编时将翻译为 41H、42H。

不像 C 或 C++ 那样自动在最后加结束标志。ASCII 是 8 位。

2. 标号

标号放在一条指令的前面,它就是该指令在内存中存放地址的符号表示,即指令地址的别名。

每个标号有三种属性。

(1)段值属性(SEG)

标号所在段的段地址。

(2)偏移量属性(OFFSET)

标号所在段的段首到定义标号的地址之间的字节数,即偏移地址。

(3)类型属性

标号的类型有 NEAR 和 FAR 两种:

  • NEAR 型地址指针为 2 个字节,只能在段内引用;
  • FAR 型地址指针为 4 个字节,可以在其它段被引用。

缺省时默认为 NEAR,如:JMP L1 等价于 JMP NEAR PTR L1 。

获得属性:

MOV BX,OFFSET L1 ;获取 L1 的偏移地址

MOV BX,SEG L1 ;获取 L1 的段地址

其中 OFFSET 和 SEG 是伪指令。

3. 变量

变量是用来表示存放数据的存储单元,程序中以变量名的形式来访问变量,而变量名就是存放某数据块的存储单元的首地址。

格式:

说明: 其中表达式1、表达式2是给存储单元赋的初值。

举例:

注意事项:

(1)变量类型与指令的要求必须相符。

DATA2  DB  200H  ;错误。只能赋一个字节。

MOV  BX,DATA2  ;错误。类型不匹配。若强制转换,则 DATA2 内容为 3020H 。

(2)在定义变量时,变量名对应的是数据区的首地址。如果数据区中有多个数据,则在对其它数据操作数时需修改地址。

NUM  DB  11H,22H,33H

...

MOV  BL,NUM  ;将 11H 送入 BL

MOV  AL,NUM + 2  ;将 33H 送入 AL

每个变量有三种属性。

(1)段值属性(SEG)

变量所在段的段地址。

(2)偏移量属性(OFFSET)

变量所在段的段首到变量地址之间的字节数,即偏移地址。

(3)类型属性

  • BYTE(字节)
  • WORD(单字)
  • DWORD(双字)
  • QWORD(四字)

变量类型必须满足指令要求。

4. 表达式

表达式是指令性语句操作数的常见形式,它由常数、变量、标号等通过操作运算符连接而成。

说明:汇编语言语句中的表达式不是指令,本身不能执行。在程序汇编时,汇编程序将表达式进行相应的运算,得出一个确定的值。所以在程序执行时,表达式本身已是一个有确定值的操作数。表达式仅是将求其值的计算任务交给了汇编程序来完成。

举例

MOV  AX,0ADH  AND  0CCH

MOV  BX,OFFSET  DMem1

MOV  BX,0FFFFH  AND AX  ;错误。

编译期 AX 的内容不能确定,要执行之后才能确定。

MOV  BX,0FFFFH  AND [BP]  ;错误。

编译期存储器内容也不能确定,要执行之后才能确定。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享文章:DJ13-1汇编语言程序设计-1-创新互联
URL标题:http://ybzwz.com/article/djodge.html