汇编语言第一到三章

文章目录

寄存器

寄存器

处理器内部的高速存储单元
用于暂时存放程序执行过程中的代码和数据
寄存器分为透明寄存器和可编程寄存器

通用寄存器

处理器最常使用的整数通用寄存器
可用于保存整数数据、地址等。
32位IA-32处理器具有8个32位通用寄存器
在这里插入图片描述

它们源自8086的八个16位通用寄存器

  • AX
  • BX
  • CX
  • DX
  • SI
  • DI
  • BP
  • SP

前四个寄存器可分为高低字节,形成8个8位通用寄存器

逻辑地址

存储空间可以分段管理,采用逻辑地址指示
逻辑地址=段基地址:偏移地址
段基地址=主存中的起始地址
偏移地址=距离段基地址的位移量

段寄存器

段寄存器表明在某个段在主存中的位置
6个16位段寄存器:CS/DS/SS/ES/FS/GS
在这里插入图片描述
代码段:
段基地址,代码段寄存器CS指示
偏移地址:指令指针寄存器EIP保存

处理器指令格式

处理器指令

程序用程序设计语言编写,由指令构成
指令由1操作码和操作数(地址码)构成

MOV

传送指令的助记符:MOV(取自Move)

数据寻址

立即数寻址

立即数寻址
数据在指令代码中,用常量表达
寄存器寻址
数据在寄存器中,用寄存器名表示
存储器寻址
数据在主存中,用存储器抵制代表
I/O寻址
数据在外设(i/o设备中),用I/O地址代表

操作数紧跟操作码,是机器代码的一部分
操作数从指令代码中得到,即立即数(Immediate)
立即数寻址方式只用于源操作数

  • 常用来给寄存器和存储单元赋值
  • 用常量形式直接表达

存储器寻址

在这里插入图片描述

  • 操作数在主存中,通过存储器地址指示
  • 指令代码表达形式地址
  • 形式地址结合规则计算得到有效地址EA
    有效地址EA=基址寄存器+变址寄存器*比例+位移量

在这里插入图片描述
寄存器的寄存期间接寻址
有效地址通过寄存器提供
方便对数组的元素或字符串的字符进行操作
数组(字符串)的首(尾)地址赋给寄存器
增减寄存器指向不同的元素(字符)
寄存器间接寻址的操作数没有类型
其类型由另一个操作数的寄存器或变量类型决定
若另一个操作数也无类型,需显式说明

在这里插入图片描述

1、从应用角度,汇编语言程序员可以将计算机抽象为

寄存器、存储器地址、输入输出地址

2、如下哪个符号不是IA-32处理器通用寄存器名

EDP

3、IA-32处理器中被称为累加器通寄存器是

EAX

4、IA-32处理器中ESP是堆栈指针寄存器

5、IA-32处理器支持8个32位通用寄存器

6、一个字节Byte是指1二进制多少位?

8

7、IA-32处理器具有32位地址,能具有访问的主存储器容量是

4GB

8、物理地址也称逻辑地址,也是虚拟地址。

9、应用程序一般涉及代码段、数据段、堆栈段

10、IA-32处理器的逻辑地址包括偏移地址.

11、 IA-32处理器保存将要执行指令在主存中的存储器地址的寄存器是:

EIP

12、IA-32处理器保存标志的寄存器是

EFLAGS

13、IA-32处理器的CS是代码段寄存器

14、IA-32处理器的DS是数据段寄存器

15、IA-32处理器的ESP与SS配合指向堆栈段当前栈顶

1-2-1程序格式第一次练习题

1、助记符MOV表达的指令功能是:

传送

2、指令“mov eax, 100” 的源操作数是:

100

3、指令一般由操作码和操作数组成

4、在MASM的语句语法中,指令的目的操作数一般在左边,源操作数在右边

5、IA-32处理器的指令所采用的二进制编码长度均是32位(Bit)

1-2-2程序格式第二次练习题

1、汇编语言源程序中,每个语句由四项组成,不影响语句功能的是:

注释

2、语句“msg byte 13,10,0”中,关键性的助记符是:

byte

3、MASM的语句分成执行性语句和说明性语句。

4、MASM汇编语言的分隔操作数使用英文逗号,不能用中文逗号。

5、MASM汇编语言的注释用分号开始,无所谓英文分号还是中文分号,都可以。

1-2程序格式第三次练习题

1、可执行代码(语句)应该在___定义的段中.

code

2、语句“.data”说明是什么性质的逻辑段?

数据段

3、“END”伪指令仅说明汇编到此结束,并不具备返回操作系统的功能。

4、汇编结束也就是程序执行终止。

5、为IA-32处理器编程只应该使用8086的16位指令

1-2 程序格式第四次练习

1、定义要显示的字符串可以使用的伪指令是

byte

2、本课程使用“exit 0”表达

程序执行终止

3、要显示字符串“I Love Assembly”,MASM可以直接使用C语言的printf函数。

4、要显示字符串,可以使用本课程提供的DISPMSG子程序。

5、C语言使用函数名(含参数)就是调用函数,IA-32处理器需要使用“CALL”调用指令实现调用。

1-3 程序开发过程第一次练习

1、MASM开发软件中的“ml.exe”是指:

汇编程序

2、汇编程序的作用是:

将汇编语言程序转换为机器代码

3、人们常会将汇编语言程序简称为汇编程序,但严格来说,两者是不同的。

4、程序设计语言的开发环境通常要包括连接程序(例如,常用的文件名是LINK)。

5、本课程主要采用MASM 6.x版本。

1-3程序开发过程第二次练习

1、32位Windows XP/7/8等操作系统中,启动控制台窗口的文件是:

cmd.exe

2、32位Windows XP/7/8等操作系统中,启动16位模拟DOS窗口的文件是:

command.com

3、32位Windows控制台与16位模拟DOS窗口的界面和基本功能相同,所以本质上就是同一个程序。

4、32位Windows XP/7/8等操作系统中,“命令提示符”一般是指Windows控制台。

5、32位中文Windows XP/7/8等操作系统中,Windows控制台窗口也支持中文的输入输出。

1-3-3 第三次练习

1、编写汇编语言源程序文件,应使用______。

编辑程序

2、DOS/Windows平台中,汇编语言源程序文件的扩展名为:

asm

3、本课程提供一个“MAKE32.BAT”批处理文件用于快速开发汇编语言程序。

4、如果源程序文件没有错误,列表文件就为空。

5、开发过程中生成的目标模块文件(.OBJ)与列表文件(.LST)一样都是文本性质的文件,可以使用文字编辑软件打开。

2-1 第一次作业

1、MASM汇编语言中,表示十六进制数的后缀字母是

H

2、MASM汇编语言中,表示二进制数的后缀字母是

B

3、MASM中,字符用单引号括起,字符串用双引号括起。

4、MASM中,使用“=”或者“equ”都可以定义符号常量。

5、按照MASM语法,“AH”是一个8位寄存器,“0AH”表达十六进制数。

2-1 第二次作业

1、指令byte 100 定义的数据是:

64H

2、下面指令可以定义数据-1的指令是:

byte 0FFFH

3、汇编语言中,表达真值“100”,可以使用二进制“01100100B”表达。

4、小写字母“d”作为字符,它在主存中与十六进制数“64H”是一样的。

5、小写字母“d”作为字符,它在主存中与十六进制数“64H”是一样的。

2-2 第一次作业

1、MASM定义变量的伪指令不包括:

equ

2、MASM中定义的变量保存在通用寄存器中。

3、变量定义的参数表中出现“?”符号,说明该存储空间没有赋初值。

4、变量定义中的操作符“dup”用在初值表中,表示多个重复的参数。

5、MASM定义变量必须有变量名,否则不能定义。

2-2 第二次作业

1、分配一个字节空间的伪指令是:

byte

2、MASM使用“byte”定义的变量,与C语言的变量类型对应的是:

char

3、语句“byte 5 dup(1,2)”分配主存的存储单元个数是:

10

4、定义字符串也可以使用字节变量定义伪指令“BYTE”。

5、数值“356”可以作为BYTE伪指令定义的变量初值。

2-2 第三次作业

1、语句“word 5 dup(1,2)”分配主存的存储单元个数是:

20

2、语句“word -1”在主存分配的数据用十六进制表达是:

FFFFH

3、MASM伪指令“word”定义的字量数据是指16位数据。

4、语句“word ?”表示预留一个字节存储空间。

5、数值“356”可以作为WORD伪指令定义的变量初值。

2-2 第四次作业

1、关于MASM语句“dvar dword ?”的说法正确的是:

dvar变量无初值,占有4个主存存储单元

2、以32位数据分配存储空间的伪指令是:

dword

3、伪指令“DWORD”定义的32位变量要占用4个字节存储空间。

4、伪指令“dword”只能定义无符号整数为变量初值。

5、MASM定义无初值变量使用“?”符号,但通常汇编程序填入0。

2-3 第一次作业

1、在IA-32处理器中,语句“dvar6 dword 38323139h”为变量dvar6所在的4个存储单元最高地址中分配的数值是:

38H

2、Intel 80x86系列处理器采用小端(Little Endian)方式存储多字节数据。

3、所谓小端方式是指数据的低字节部分保存于存储器的低地址单元、高字节数据部分保存于存储器的高地址单元。

4、主存储器采用字节编址,意味着每个存储单元具有一个地址、保存一个字节的数据。

5、存储多字节数据采用小端方式一定比大端方式好,因为没有处理器采用大端方式。

2-3 第二次作业

1、返回变量名所在段的偏移地址的操作符是:

offset

2、指令“org $+10H”的作用是:

一条机器码和当前地址之间有10H个内存空间。

3、变量的地址属性是指变量所在存储单元的逻辑地址,包括段基地址和偏移地址。

变量的地址属性是指变量所在存储单元的逻辑地址,包括段基地址和偏移地址。

4、bvar是一个字节变量,语句“mov al ,bvar”与“mov al ,[bvar]”功能相同。

5、指令“MOV EAX, VAR+2”与“MOV EAX, VAR[2]”功能相同。

2-4 第三次作业

1、将变量按照指定的类型使用的类型操作符是:

PTR

2、双字变量的类型值是:

4

3、定义变量后,变量名就具有了类型属性。

4、定义为双字类型的变量,不能按字节或字类型访问。

5、本课程提供的子程序DISPRD可以显示8个32位通用寄存器的内容。

3-1 第一次作业

1、寻址方式的含义是指通过地址访问指令或数据的方法。

2、数据寻址的含义是指通过地址访问指令操作数(数据)。

3、指令寻址是指确定要执行的下一条指令的地址。

4、令操作数来自处理器的寄存器,被称为寄存器寻址。但把指令操作数保存于处理器的寄存器,就不能被称为寄存器寻址。

5、变量指向存储单元,所以访问变量就是存储器寻址。

3-1 第二次作业

1、语句“mov al,12h”中采用立即数寻址的部分是:

12h

2、语句“mov eax,offset dvar”中(dvar是一个变量)采用立即数寻址的部分是:

offset dvar

3、立即数是指从指令的机器代码中直接取得的操作数。

4、立即数寻址方式只用于目的操作数。

5、语句“mov edx,type dvar”中(dvar是一个双字变量)源操作数采用立即数寻址。

3-2 第一次作业

1、源操作数采用寄存器寻址的指令(var是一个变量)是:

mov var, eax

2、语句“mov eax, ebx”的两个操作数都是采用寄存器寻址方式。

3、语句“mov dx, ds”的源操作数不是寄存器寻址方式。

4、语句“mov bvar, cl”目的操作数的寻址方式是寄存器寻址方式。

5、MASM中,语句“mov si,edi”有语法错误。

3-3 第二次作业

1、使用EBP或ESP作为基址寄存器,操作数默认是在:

堆栈段

2、存储器寻址的操作数当然在主存储器中了。

3、IA-32处理器的存储器寻址中,8个32位的通用寄存器都可以作为基址寄存器使用。

4、堆栈操作默认是由SS寄存器指示的段中。

5、存储器操作数由逻辑地址指示,一定要表达出段基地址。

3-3 第三次练习题

1、源操作数采用存储器的直接寻址的指令(var是一个变量)是:

mov ebx,var+2

2、直接寻址把存储器操作数的有效地址直接编码进指令的机器代码中。

3、MASM规定直接寻址只能用具体的地址值直接表达,不能使用变量名等形式表达。

4、在MASM语法中,语句“mov eax,dvar”和“mov eax,[dvar]”是同一条指令,其中dvar是一个双字类型的变量(名)。

5、dvar1和dvar2分别为双字变量,指令“mov dvar1, dvar2”是否正确?

3-3 第四次练习

1、指令“mov [edi], al”的功能是将AL寄存器的值传送到

数据段中,EDI间接寻址的主存中

2、存储器的寄存器间接寻址中,寄存器相当于一个地址指针的作用。

3、MASM中,“EBX”和“[EBX]”都表示EBX寄存器的内容,含义是一样的。

4、指令“mov ebx, [ebx]”的源操作数采用寄存器间接寻址。

5、语句“mov [ebx],250”没有语法错误。

3-3 第五次作业

1、指令“mov eax, count[esi]”中源操作数的寻址方式是:

寄存器相对寻址

2、在MASM支持的语法中,与[ebx+8]含义不相同的表达方式是(其中eight是一个常量,是数值8):

[ebx*8]

3、源操作数不是寄存器相对寻址的指令是:

mov eax, [ebx]

4、寄存器相对寻址有一个位移量和一个寄存器内容相加形成存储器操作数的有效地址。

5、语句“mov [edi], [esi+4]”是非法指令。

猜你喜欢

转载自blog.csdn.net/m0_37149062/article/details/123964563
今日推荐