文档库 最新最全的文档下载
当前位置:文档库 › 汇编语言程序设计

汇编语言程序设计

汇编语言程序设计
汇编语言程序设计

第4章 汇编语言程序设计

§4.1 汇编语言的模式

一、汇编语言源程序的一般模式

[Name 模块名]

[Title 标题]

[定义宏]

[定义数据段]

[定义附加段]

[定义堆栈段]

定义代码段

源程序结束

中括号括起的部分可以省略,可见在一个汇编语言源程序中必须要定义代码段,并且必须有源程序结束指令。

二、8086汇编语言程序的一个例子

Pg90。

§4.2 语句行的构成

汇编语言中的语句一般分为两种类型:指令性语句和指示性语句。

指令性语句的格式为:

[标号:] 助记符 [操作数1[,操作数2]] [;注释]

指示性语句的格式为:

[名称] 助记符 [参数1,参数2,……] [;注释]

标号和名称都是编程人员根据需要和一定的规则任意取的。也可以认为汇编语言的语句行是由标记和分隔符(空格)构成。

一、标记

1.IBM宏汇编的字符集

(1)字母

(2)数字符

(3)特殊字符

2.界符

用于定界一个标记的结束或一个标记的开始,本身具有一定的意义。

3.常量

出现在汇编语言源程序中的固定值称为常量。

(1)数值常量

①二进制:以字母B结束。

②十进制:以字母D或无字母结束。

③八进制:以字母Q(或O)结束。

④十六进制:以字母H结束。

(2)字符常量

指用单引号或双引号引起的字符或字符串。

4.标识符

由程序员自己建立的字符序列(标号或名称)。一个标识符不能超过31个字符,不能以数字开头。

5.保留字

汇编语言中具有特殊意义的字符序列。

6.注释

一行中分号以后的部分。用于对一段或一行程序进行说明,便于阅读和理解。

二、符号

具有一定意义的字符序列。

1.寄存器名

2.变量

段属性、偏移属性、类型属性

3.标号

段属性、偏移属性、类型属性

4.常数

5.其它

三、表达式

由操作数和运算符组合而成的序列。

1.操作数

(1)立即数

(2)寄存器操作数

(3)存储器操作数

2.运算符

(1)算术运算符

+、-、*、/、MOD(求余)

(2)逻辑运算符

AND、OR、NOT、XOR

(3)关系运算符

EQ、NE、LT、LE、GT、GE

结果为“假”时,返回0,结果为“真”时,返回二进制全1。

§4.3 指示性语句

指示性语句不能被CPU执行,为编译程序服务,主要用于汇编语言源程序中的各种定义或说明。

一、符号定义语句

用于定义符号常量。

1.等值语句EQU

格式:符号名 EQU 表达式

例: PORT EQU 40H ;用PORT代替40H号端口

COUNT EQU CX ;用COUNT代替CX寄存器

M EQU MOV ;用M代替MOV指令助记符

注:EQU语句不能重新定义,即在同一源程序中,用EQU定义过的符号不能赋予不同的值。

例:B EQU [bp+8]

B EQU 20H 不行!

2.等号语句=

格式:符号名 = 表达式

功能与EQU类似。

例: PP = 89FAH ;赋值

PP = PP+1 ;PP = 89FBH

注:

等号语句与EQU语句的相同点:

符号不是变量,

所以用EQU、= 定义的符号不占用存储器单元。

区别:

等号语句可以在同一源程序中重复定义同一个符号名,而等值语句不行。

二、数值定义语句

用于定义变量,指定变量的类型和名称,并为其分配存储单元和预置初值。

1.格式:

[变量名] 数据定义符 参数数1 [,参数数2,参数3……] [;注释]

说明:

变量名指示存储器操作数的地址(符号地址);

数据定义符指示存储器操作数的类型(DB字节、DW字、DD双字等);

参数数指示存储器操作数的内容,是赋给变量的初值。;

多个相同类型的变量可在一条语句中定义;

方括号中的内容表示可以省略。

2.参数的形式

(1)数值常数或能产生数值常数的表达式

V1 DB 20,35,60

V2 DW 25*250

(2)字符或字符串

V2 DB ‘a’

V3 DB ‘a’ , ‘b’, ‘c’, ‘d’, ‘e’, ‘f’

等效于:V3 DB ‘abcdef’

当字符串长度不超过两个字符时,也可以用DW来定义。

V4 DW ‘ab’, ‘cd’, ‘ef’

(3)?

一个?号代表一个参数,表示其值不确定,不赋值,预留内存单元,以存放结果。

V5 DB ?,?

V6 DW ?

(4)DUP重复子句

当多个参数相同时,可用重复子句DUP来缩写:

格式: 重复次数 DUP(重复内容)

V7 DB 0,0,0,0,0,0

等效于:V7 DB 6 DUP(0)

DUP子句可以嵌套

如:V8 DW 20 DUP(5 DUP(1,2))

3.参数在内存中的存放规则

(1)对于字节变量按顺序存放

(2)对于字变量或双字变量按低字节在低地址,高字节在高地址的原则存放。

变量名代表该变量所占内存空间第一个单元的偏移地址。

4.分析运算符

(1)SEG:返回一个变量或标号的段地址

格式:SEG 变量名(或标号)

(2)OFFSET:返回一个变量或标号的偏移地址

格式:OFFSET 变量名(或标号)

(3)TYPE:返回一个变量或标号的类型属性

格式:TYPE 变量名(或标号)

DB DW DD NEAR FAR

1 2 3 -1 -2

(4)LENGTH:返回变量定义时最外层DUP子句的句的重复次数,如果变量定义时未用DUP子句,则返回1。

格式:LENGTH 变量名

(5)SIZE:可以返回一个变量定义时所占的字节数。

格式:LENGTH 变量名

假设有一变量x。则,SIZE x = TYPE x × LENGTH x

5.合成运算符

(1)PTR:临时改变一个存储器操作数或一个标号的类型属性。

格式:类型属性 PTR 存储器操作数(或标号)

对于存储器操作数,类型属性可以为:BYTE、WORD、DWORD。

对于标号,类型属性可以为:NEAR、FAR

例:

MOV BYTE PTR [BX],50

MOV WORD PTR [BX],50

JMP FAR L0

(2)THIS:永久性地为某一变量或标号设置一个新的类型属性。

格式:名称 THIS EQU THIS 类型属性

例:

V1 EQU THIS WORD

V2 DB 10H,20H

MOV AL,V2

MOV AX,V1

V1和V2指向同一个内在地址,V1为字属性,V2为字节属性。

L0 EQU THIS FAR

L1:……

L0和L1指向同一个内在地址,L0为远属性,L1为近属性。

三、段定义语句

1.格式

段名 SEGMENT

……

……

段名 ENDS

2.段指定

ASSUME 段寄存器名1:段名1,段寄存器名2:段名2,……

该语句放在代码段中的第一行,用于建立段寄存器名与段名的联系。 3.段内偏移地址指定

ORG 数值表达式

用于指定紧跟其后的内存单元偏移地址为表达式的值。

例:

ORG 20H

V1 DW 5,10

则变量V1的偏移地址为20H。

4.段地址填装

将所定义段的段地址传送到相应的段寄存器中。

(1)代码段的段地址自动填装。

(2)数据段、附加段、堆栈段的段地址在程序中用指令填装。 例:

MOV AX,数据段名

MOV DS,AX

MOV AX,附加段名

MOV ES,AX

MOV AX,堆栈段名

MOV SS,AX

LEA SP,栈底

四、过程

1.过程定义

过程名 PROC [NEAR|FAR]

……

……

过程名 ENDP

过程定义在代码段中,过程中必须有返回指令RET。

2.过程调用

CALL 过程名

五、宏

1.宏定义

宏名 MACRO [形参表]

……

……

ENDM

如果在宏中使用标号,必须先用LOCAL语句加以说明。

格式为:LOCAL 标号1,标号2,……

宏定义的位置处于段定义之前。

2.宏调用

宏名 [实参表]

如果定义时有形式参数,调用时必须有实际参数。

六、源程序结束语句

END 标号

该语句处于源程序的最后一行,标号为代码段中第一指令性语句的标号,该语句必须有标号,一般用GO或BEGIN或START等。

§4.4 指令语句

指令性语句是能被CPU执行的语句,每条语句编译后都能产生一个机器代码。

一、指令助记符

第3章所讲的每一条指令都有一个助记符,除了这些指令以外,8086的指令系统还有一些附加指令。

1.空操作指令NOP

2.保留空格指令NIL

二、指令前缀

LOCK

REP

REPE|REPZ

REPNE|REPNZ

三、操作数寻址方式

Pg115

四、串操作指令

Pg116

例:未组合BCD加法程序设计

设 x1 DB ‘1752’

x2 DB ‘3814’

y DB 5 DUP(0)

编程实现:y←x1+x2

按照人的读数习惯将x1理解成1752,

x2理解成3814,从低位开始作加法运算。

编程算法如右图所示。

§4.5 汇编语言程序设计及举例

一、顺序程序设计

顺序程序是指没有分支、没有循环的直线运行程序。

例4-1 两个32位无符号乘法程序

Pg120

二、分支程序设计

分支程序是指可以根据某种条件来选择程序的执行过程。

例:编程实现

1 当x>0

Y= 0 当x=0

-1 当x<0

三、循环程序设计

循环程序是指可以反复执行某一部分的程序,将这种结构称为循环结构,一个循环结构通常由三部分组成。

(1)循环体

程序中重执行的部分。

(2)循环结束条件

任何一个循环程序都应有一个结构条件,并且这个条件总能满足,否则就会构成死循环。

循环的结束分为两种情况:

①已知循环总人数;

②循环次数未知,但知道循环结束条件。

(3)循环初态

循环开始前的初始状态,一般用来设置循环次数,循环的初始地址指针,计数器清零等。

例4-2 Pg122。

四、字符串处理程序设计

计算机经常要处理字符,常用的字符编码是ASCII码。在使用ASCII码字符时,要注意以下几点:

(1) ASCII码的数字和字符形成一个有序序列。例如数字0~9的ASCII码为30H~39H,大写字母 A~Z的ASCII码为41H~5AH等。

(2) 计算机并不区分可打印的和不可打印的字符,只有I/O装置(例如显示器、打印机)才加以区分。

(3) 一个I/O装置只按ASCII码处理数据。例如要打印数码7,必须向它送7的ASCII 码37H,而不是响铃符07H。若按数字键9,键盘送至主机的是9的ASCII码39H。

(4) 许多ASCII装置(例如键盘、显示器、打印机等)并不用整个ASCII字符集。例如,有的忽略了许多控制字符和小写字母。

(5) 不同的设备对ASCII控制字符的解释往往不同,在使用中需要注意。

(6) 一些广泛使用的控制字符为:

0AH 换行(LF)

0DH回车(CR)

08H退格

7BH删除字符(DEL)

(7) 基本ASCII字符集的编码为7位,在微型计算机中就用一个字节(最高位为零)来表示。

例4-3 Pg124。

例4-4 Pg126。

五、ASCII码转换程序设计

输入输出设备以ASCII码表示字符,数通常是用十进制数来表示,而机器内部以二进制表示。所以,在CPU与I/O设备之间必须要进行码的转换。实现码转换的方法有:

(1) 对于有些转换,利用CPU的算术和逻辑运算指令很容易实现,故可用软件实现转换;

(2) 某些更为复杂的转换,可以用查表来实现,但要求占用较大的内存空间;

(3) 对于某些转换,用硬件也是容易实现的,如BCD到七段显示之间转换的译码器等。

例4-5 Pg127。

例4-6 Pg129。

六、有关I/O的DOS功能调用

为了在程序运行过程中了解运行的情况,应该设法把结果在显示器CRT上显示出来。要在程序中显示结果,方便的方法是调用操作系统中的I/O子程序。操作系统的核心是由许多有关I/O驱动、磁盘读写以及文件管理等子程序构成。这些子程序都编了号,可由汇编语言的源程序调用。在调用时,把子程序的号(或称系统功能调用号)送至AH,把子程序规定的入口参数,送至指定的寄存器,然后由中断指令INT 21H来实现调用。在这里通过几个程序例子介绍少量的有关I/O的功能调用,便于读者在程序中使用。

1.单字符的接收

2.字符串的接收

3.单字符的显示

4.字符串的显示

5.文件夹操作

6.文件操作

7.光标操作

8.图形操作

9.时间操作

10、中断操作

七、宏汇编与条件汇编

在前面举例中,若一个程序段要多次使用,为了简化程序采用了子程序的办法。因此,常常把一些经常使用的典型的程序编为子程序,一方面简化了程序的编制,另外也可以提高程序的质量和可靠性。这样的目的也可以用宏指令和宏汇编来实现。

1.宏指令的用途

(1)在汇编语言的源程序中,若有的程序段要多次使用,为了使在源程序中不重复书写这个程序段,可以用一条宏指令来代替。由宏汇编程序在汇编时产生所需要的代码。

(2) 宏定义不但能使源程序的书写简洁,而且由于宏指令具有接收参量的能力,所以功能就更灵活。

(3) 形式参量不仅可出现在操作数部分,也可以出现在操作码部分。

2.IBM宏汇编中主要宏操作伪指令

(1) MACRO

其一般格式为: 宏定义名是一个宏定义调用的依据,也是不同宏定义相区别的标志,是必须要有的。对于宏定义名的规定与对标识符的规定是一致的。

宏定义中的形式参量表是任选的,可以没有形式参量,也可以有若干个形式参量。若有一个以上的形式参量时,它们之间必须用逗号分隔。对形式参量的规定与对标识符的规定是一致的,形式参量的个数没有限制,只要一行限制在132个字符以内就行。

在调用时的实在参量多于1个时,也要用逗号分隔,它们与形式参量在位置上一一对应。但IBM宏汇编并不要求它们在数量上必须一致。若调用时的实在参量多于形式参量,则多余的部分被忽略;若实在参量少于形式参量,则多余的形式参量变为NULL(空)。

MACRO必须与ENDM成对出现。

(2) PURGE

一个宏定义名,可以用伪指令PURGE来取消,然后就可以重新定义。

PURGE伪指令的格式为:

PURGE 宏定义名[,…]

即一个PURGE可以取消多个宏定义。

(3) LOCAL

宏定义体内允许使用标号。例如,在AL中有1位十六进制数码要转换为ASCII码,则可以用以下宏定义:

CHANGE MACRO

CMP AL,10

JL ADD_0

ADD AL,′A′-′0′-10

ADD_0:ADD AL,′0′

ENDM

若在一个程序中多次使用这条宏指令,则在汇编展开时,标号ADD_0就会出现重复定义的错误,这是不允许的。为此系统提供了LOCAL伪指令,其格式为: LOCAL 形式参量表

汇编程序对LOCAL伪操作中的形式参量表中的每一个形式参量建立一个符号(用??0000~?? FFFF表示)以代替在展开中存在的每个形式参量符号。但是要注意,LOCAL伪操作只能用在宏定义体内,而且必须是MACRO伪操作后的第一个语句,在MACRO 与LOCAL之间不允许有注释和分号标志。

(4) REPT

其一般格式为:

REPT 〈表达式〉

{……}指令体

ENDM

这个伪指令可以重复执行在它的指令体部分所包含的语句。重复执行的次数,由表达式的值所决定。

例如:把1~10分配给十个连续的存储单元。

X = 0

REPT 10

X = X+1

DB X

ENDM

利用这个伪指令可以对某个存储区赋值(建立一个表)。

(5) IRP

其一般格式为:

IRP 形式参量(参数表)

{……}指令体

ENDM

此伪指令能重复执行指令体部分所包含的语句,重复的次数由参数表中参数的个数所决定(参数表中的参数必须用两个尖括号括起来,参数间用逗号分隔)。而且每重复一次按次序用参数表中的参数代替形式参量。

例如:

IRP X〈1,2,3,4,5,6,7,8,9,10〉

DB X

ENDM

因为参数表中的参数是10个,故指令体部分重复执行10次。上例中指令体部分只有一条伪指令DB X,其中X为形式参量,在第一次执行时,用参数表中的第一个参数1,代替形式参量则为DB 1;第二次执行时,用参数表中的第二个参数2代替形式参量就为DB 2;……所以上例也是把1到10分配给10个连续的存储单元。

(6) IRPC

其一般格式为:

IRPC 形式参量,字符串(或〈字符串〉)

{……}指令体

ENDM

此伪指令也能重复执行指令体部分所包含的语句。重复执行的次数,取决于字符串中字符的个数。而且每次重复执行时,依次把字符串中的字符代替形式参量。

所以,IRPC伪指令与IRP伪指令很类似,只是用字符串(此字符串可以包括在两个尖括号中,也可以不包括)代替了IRP指令中的参数表。

3.宏定义嵌套

宏定义允许嵌套,即可以在一个宏定义中利用宏调用,条件是这个宏调用必须先定义。

例如:

DIF MACRO N1,N2

MOV AX,N1

SUB AX,N2

ENDM

DIFSQR MACRO N1,N2,RESULT

PUSH DX

PUSH AX

DIF N1,N2

IMUL AX

MOV RESULT,AX

POP AX

POP DX

ENDM

宏定义中还可以包含宏定义,当然在调用内层宏定义前必须先调用外层宏定义(实质上此调用起对内层宏指令的定义作用)。

例如:

DIFMALOT MACRO OPNA,OPRAT

OPNA MACRO X,Y,Z

PUSH AX

MOV AX,X

OPRAT AX,Y

MOV Z,AX

POP AX

ENDM

ENDM

其中,OPNA是内层宏定义的名,它也是外层宏定义的形式参数,当调用外层宏定义DIFMALOT时,就形成了对内层的定义。

若有宏调用:

DIFMALOT ADDITION,ADD

经汇编展开为:

LOGICAND MACRO X,Y,Z

PUSH AX

MOV Z,AX

ADD AX,Y

MOV Z,AX

POP AX

ENDM

4.宏指令与子程序的区别

宏指令是用一条宏指令来代替一段程序,以简化源程序。子程序也有类似的功能,那么,这两者之间有什么区别呢?

(1) 宏指令是为了简化源程序的书写,在汇编时,汇编程序处理宏指令,把宏定义体插入到宏调用处。所以,宏指令并没有简化目标程序。有多少次宏调用,在目标程序中仍需要有同样多次的目标代码插入。所以,宏指令没有能节省目标程序所占的内存单元。

子程序是在执行时由CPU处理的。若在一个主程序中多次调用同一个子程序,在目标程序的代码中,主程序中仍只有调用指令的目标代码,子程序的代码仍是一个。

(2)根据上述比较,可以看出: 若在一个源程序中多次调用一个程序段,则可用子程序,也可以用宏指令来简化源程序。用子程序的方法,汇编后产生的目标代码少,也即目标程序占用的内存空间少,节约了内存空间。但是,子程序在执行时,每调用一次都要先保护断点,通常在程序中还要保护现场;在返回时,先要恢复现场,然后恢复断

点(返回)。这些操作都额外增加了时间,因而执行时间长,速度慢。而宏指令恰好相反,它的目标程序长,占用的内存单元多;但是执行时不需要保护断点、保护现场以及恢复、返回等这些额外的操作,因而执行时间短,速度快。

5.条件汇编

IBM宏汇编提供条件汇编功能。各种条件汇编语句的一般格式为:

IF XX ARGUMENT

(语句体1)

[ELSE] (任选)

(语句体2)

ENDIF

其中,ARGUMENT表示条件,其值只有两个: 不是真(TURE)就是假(FALSE)。当条件为真时,汇编程序就对语句体1中所包含的汇编语句进行汇编;若条件为假,且语句中如果有ELSE以及语句体2的话,则汇编程序就跳过语句体1而对语句体2中的语句进行汇编;但若条件为假,且语句中没有ELSE以及语句体2,则汇编程序就跳过这一组条件汇编语句,往下进行。ENDIF是任一种条件语句的结束符。

IBM宏汇编提供了如下的条件汇编语句:

(1) IF〈表达式〉

若表达式的值不为0,条件为真。

(2) IFE〈表达式〉

若表达式的值为0,条件为真。

(3) IF1

若汇编程序正处在对源程序的第一遍扫描的过程中,条件为真。

(4) IF2

若汇编程序正处在对源程序的第二遍扫描的过程中,条件为真。

(5) IFDEF〈符号〉

若指定的符号已被定义,则条件为真。

(6) IFNDEF〈符号〉

若指定的符号未被定义,则条件为真。

(7) IFB〈参量〉

若参量为空格,则条件为真。

(8) IFNB〈参量〉

若参量不是空格,则条件为真。

(9) IFIDN〈参量1×参量2〉

若参量1中的串与参量2中的串相同,则条件为真。

(10) IFDIF〈参量1×参量2〉

若参量1和参量2的串不同,则条件为真。

汇编语言程序设计试题A卷

陕西电子信息职业技术学院考试试卷(A) 2011至2012学年度第一学期 期末 班级: 09成教 课程: 汇编语言程序设计 题 号 一 二 三 四 五 合分人 分 数 总 分 (考试时间:120分钟 满分100分) 一、单项选择题(本大题共10小题,每小题2分,共20分) 1. 计算机硬件中最核心的部件是( )。 A. 运算器 B. 主存储器 C. CPU D. 输入 / 输出设备 2. 指令指针寄存器(IP )中存放的内容( )。 A. 指令 B. 指令地址 C. 操作数 D. 操作数地址 3. 寄存器间接寻址方式中,要寻找的操作数位于( )中。 A. 通用寄存器 B. 内存单元 C. 段寄存器 D. 堆栈 4. I/O 端口的编址方式分为统一编址和( )。 A. 独立编址 B. 选择编址 C. 设置编址 D. 控制编址 5. 汇编语言程序中可执行的指令位于( )中。 A. 数据段 B. 堆栈段 C. 代码段 D. 附加数据段 6. 循环结构设计中,要考虑的核心问题是( )。 A. 循环的控制 B. 选择循环结构 C. 设置循环参数初始值 D. 修改循环控制参数 7. 在汇编中用于管理和控制计算机相关功能的指令是( )。 A. 伪指令 B. 机器指令 C. 宏指令 D. 目标指令 班级 姓名 学号 — — — — — — — — — — — — — — — — 密 — — — — — — — — — 封 — — — — — — — — — — 线 — — — — — — — — — — — — — — — —

8. 识别中断源的方法包括查询中断和()共两种类型。 A. 指令中断 B. 故障中断 C. 矢量中断 D. 实时时钟中断 9. CPU与I/O设备之间需要传输的信息通常包括()、状态信息 和控制信息。 A. 编址信息 B. 格式信息 C. 中断信息 D. 数据信息 10. 一般情况下,汇编源程序应由数据段、()和代码段共三个逻 辑段组成。 A. 逻辑段 B. 堆栈段 C. 指令段 D. 类型段 二、名词解释(本大题共5小题,每小题4分,共20分) 11. 微处理器: 12. 寻址方式: 13. 伪指令: 14. 中断源:

8086汇编语言程序设计

实验1 简单汇编语言程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握简单汇编语言程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG 工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG 工具调试程序,验证程序的正确性。 1. 若X、Y、R、W 是存放8 位带符号数字节单元的地址,Z 是16 位字单元的 地址。试编写汇编程序,完成Z←((W-X) ÷5-Y)?(R+ 2) 。 2.试编写一个程序,测试某数是否是奇数。如该数是奇数,则把DL 的第0 位置1,否则将该位置0。 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验2 分支及循环程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握分支程序和循环程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编写汇编程序,统计某存储区若干个数据中英文字母的个数,并将结果在屏幕上显示。 2.从键盘任意输入一组字符数据,请编写汇编程序将该组数据加密后在屏幕上显示。参考加密方法是:每个数乘以2。(说明:本题的加密方法,同学们可以自己拟定) 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验3 子程序程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握子程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编程以十进制形式和十六进制形式显示AX的内容,并把两个显示功能分别封装成子程序dispDEC和dispHEX。 2.设在以EXAMSCORE为首地址的数据缓冲区依次存放某班10名同学5门功课的成绩,现要统计各位同学的总分,并将总分放在该学生单科成绩后的单元,并调用第1个程序封装好的子程序,以十进制方式显示统计情况,显示格式自行设计。请编程完成此功能。数据缓冲区参考数据定义如下: EXAMSCORE DB 01 ;学号 DB 89,76,54,77,99 ;单科成绩 DW ? ;该学生的总分 DB 02 ;学号 DB 79,88,64,97,92 ;单科成绩 DW ? ;该学生的总分 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

【汇编语言程序设计】试题及答案合集

《汇编语言程序设计试题及答案》合集 汇编语言程序设计试题及答案 1.对于有符号的数来说,下列哪个值最大(D) A:0F8H B:11010011B C:82 D:123Q 2.下列有关汇编语言中标号的命名规则中,错误的是(D) A:通常由字母打头的字符、数字串组成 B:标号长度不能超过31个字符 C:?和$不能单独作为标号 D:.号不可位于标号首 3.8088/8086存储器分段,每个段不超过(D ) A.64K个字 B.32K个字节 C.1兆个字节 D.64K个字节 4.寻址指令MOV CX, [BX + DI + 20]使用的是哪一种寻址方式(B)A:寄存器寻址B:相对基址变址寻址 C:变址寻址D:基址变址寻址 5.若AX= - 15要得到AX=15应执行的指令是(A ) A.NEG AX B.NOT AX C.INC AX D.DEC AX 6.8086/8088系统执行传送指令MOV时( A) A.不影响标志位 B.影响DF方向标志 C.影响SF符号标志 D.影响CF进位标志 7.若要求一个操作数中的若干位维持不变,若干位置?1?,可以使用(B)A:NOT B:OR C:AND D:XOR 8.下列指令中段默认为堆栈段的是( C) A.MOV AX,[BX+SI+10] B.ADD AX,ES:[SI] C.SUB [BX],[BP][DI] D. MOV DX,[1000H] 9.关于8086/8088微机系列,下列说法哪个是正确的(D) A:一个存储单元由16个二进制位组成,简称字。

B:当存储一个字数据时,低字节放高地址位,高字节放低地址位。 C:在内存空间中,可以无限分配段,且段的大小不受限制。 D:段与段之间可以邻接,也可以重叠。 10.下列关于堆栈的说法,错误的是(D) A:以?先入后出?为原则。 B:栈区最高地址单元的前一个单元为栈底。 C:运行中SP寄存器动态跟踪栈顶位置。 D:压栈和弹出都是以字节为单位。 11.表示过程定义结束的伪指令是( A) A.ENDP B.ENDS C.END D.ENDM 12.BUF1 DB 3 DUP(0,2 DUP (1,2),3) COUNT EQU $-BUF1 符号COUNT等价的值是( B) A.6 B.18 C.16 D.9 13.下列标志位中,可以用来判断计算结果正负的是(B) A:PF B:SF C:DF D:OF 14.下列指令正确的是( CD) A. MOV [100H], [BX] B.MOV DS, ES C. ADD V[BX], CX D.MOV AX, 34H 15.下列哪个寄存器是属于指针寄存器(C) A:SI B:DX C:SP D:ES 二、填空题 (每小题4 分,共 20 分) 1.下列程序段求数组FLD的平均值,结果在AL中。请将程序填写完整(不考虑溢出) FLD DW 10, -20, 30, -60, -71, 80, 79, 56 _LEA SI,FLD______ MOV CX, 8 XOR AX, AX

实验一基础汇编语言程序设计

实验一基础汇编语言程序设计 实验目的 1.学习和了解TEC-XP十六位机监控命令的用法; 2.学习和了解TEC-XP十六位机的指令系统; 3.学习简单的TEC-XP十六位机汇编程序设计。 实验内容 1.使用监控程序的R命令显示/修改寄存器内容、D命令显示存储器内容、E命令修改存储器内容; 2.使用A命令写一小段汇编程序,U命令反汇编刚输入的程序,用G命令连续运行该程序,用T、P命令单步运行并观察程序单步执行情况。 3.学习联机使用TEC-XP教学试验系统和仿真终端软件。 实验要求 在使用该教学机之前,应先熟悉教学机的各个组成部分及其使用方法。 实验步骤 1.关闭电源,将大板上的COMl口与PC机的串口相连; 2.接通电源,在PC机上运行PCEC.EXE文件,设置所用PC机的串口为“l”或“2”,其它的设置一般不用改动,直接回车即可; 3.置控制开关为001110(连续、内存读指令、组合逻辑、16位、联机),开关拨向上方表示“1”,拨向下方表示“0”,“X”表示任意。其它实验相同; 4.按一下“RESET”按键,再按一下“START”’按键,主机上显示: 5.用R命令查看寄存器内容或修改寄存器的内容 1.用R命令查看寄存器或修改寄存器内容 1)在命令行提示符状态下输入: R↙;显示寄存器的内容 注:寄存器的内容在运行程序或执行命令后会发生变化。

2)在命令行提示符状态下输入: R R0↙;修改寄存器R0的内容,被修改的寄存器与所赋值之间可以无空格, 也可有—个或数个空格 主机显示: 寄存器原值:xxxx 在后面输入新的值0036 再用R命令显示寄存器内容,则R0的内容变为0036。 2.用D命令显示存储器内容 在命令行提示符状态下输入: D 2000↙ 会显示从2000H地址开始的连续128个字的内容; 连续使用不带参数的D命令,起始地址会自动加128(即80H)。

汇编语言程序设计实验教程

汇编语言程序设计实验教程

目录 第一章上机过程 (4) 1.1编辑源程序 (4) 1.2 汇编源程序 (5) 1.3连接目标程序 (6) 1.4运行程序 (7) 第二章DEBUG命令祥解 (8) 2.1 DEBUG程序使用 (8) 2.2 DEBUG的常用命令 (8) 第三章汇编语言程序设计实验 (13) 3.1实验一顺序与分支程序设计 (13) 3.2 实验二循环与子程序程序设计 (15) 3.3 实验三算术运算与代码转换程序设计 (16) 3.4 实验四字符串的匹配与替换程序设计 (18) 3.5 实验五输入输出程序设计 (19) 第四章部分实验参考答案 (21)

第一章上机过程 1.1编辑源程序 汇编语言源程序:用汇编语句编写的解决应用问题的程序。 汇编程序:将汇编语言源程序翻译成机器语言程序的系统。 汇编:将汇编语言程序翻译成机器语言程序的过程。 在编辑汇编语言源程序时,对计算机硬件工作环境无特殊要求,对软件工作环境要求也很简单,只需用建立ASCII码文本文件的软件即可。 (1)编辑软件 编辑软件:EDIT、QE、WORD、NOTEPAD等。 当输入、建立和修改源程序时,可任选一种编辑软件,不要用格式控制符,要求编辑完成的文件扩展名一定是.ASM。 (2)汇编程序 有汇编ASM.EXE、宏汇编MASM.EXE及TASM等,一般使用宏汇编MASM.EXE,因它比ASM.EXE功能强。TASM适用于8086/8088~Pentium系列指令系统所编写的汇编语言程序,是比较先进的汇编工具。 (3)连接程序 用连接程序LINK.EXE或TLINK.EXE,将MASM.EXE产生的目标代码程序(.OBJ)文件连接成可执行程序.EXE,TLINK比LINK更先进。 (4)辅助工具程序(.EXE) 进行汇编语言程序调试和文件格式转换的程序有: https://www.wendangku.net/doc/7118613470.html, 动态调试程序 EXE2BIN.EXE文件格式转换程序

汇编语言程序设计习题集111

16.提示下列指令序列执行后的正确结果是( A )。 MOV BX,OFFFCH MOV CL,2 SAR BX,CL A.3FFFH B.0FFFH C.0FFFCH D.0FFF5H 19. 指令SCAS的寻址方式是()。 A 源操作数为寄存器寻址,目的操作数为寄存器间接寻址 B 源操作数为寄存器间接寻址,目的操作数为寄存器间接寻址 C 源操作数为寄存器间接寻址,目的操作数为寄存器寻址 D 源操作数为寄存器寻址,目的操作数为寄存器寻址 22. 下列指令中不合法的指令是(C)。 A IN AX, 03F8H B MOV BX, AX C REP CMPSB D SHR BX, CL 23. 下列指令中正确的是()。 A MOV SS, 2400H B MOV SS, [2400H] C MOV SS, DS D MOV SS, SP 24. 下列指令中正确的是(A)。 A XCHG AH, AL B XCHG AL, 20H C XCHG DS, AX D XCHG SP, [20H] 29. 下列程序段执行完后,BX寄存器中的内容是( C )。 MOV CL, 3 MOV BX, 0B7H ROL BX, 1 ROR BX, CL A 002DH B 00EDH C C02DH D 000DH 30. 执行下列程序: MOV AX, 0 MOV BX, 1 MOV CX, 100 A: ADD AX, BX INC BX LOOP A HLT 执行后的结果为:(AX)= ( C ),(BX)= ( ). A 5050,99 B 2500,100 C 5050,101 D 2550,102 35. 逻辑位移指令SHR用于(D),而算术位移指令SAR用于带符号数除2。

汇编语言程序设计课后习题解答宋人杰2版

第1章汇编语言基础知识 1.简述汇编语言源程序、汇编程序、和目标程序的关系。 答:用汇编语言编写的程序称为汇编源程序;汇编源程序在汇编程序的翻译下转换成计算机语言变成目标程序。 2. 简述汇编语言的优缺点。 答:(1) 汇编语言的优点: ①可有效地访问、控制计算机各种硬件设备,如磁盘、存储器、CPU、I/O端口等。. ②目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。 ③可与高级语言配合使用,应用十分广泛。 (2) 汇编语言的缺点: ①通用性和可移植性较差 ②相对于高级语言来说较繁锁、易出错、不够直观。 3.CPU的寻址能力为8KB,那么它的地址总线的宽度为多少? 答:13 4. 1KB的存储器有多少个存储单元? 答:1024个字节。 5. 指令中的逻辑地址由哪两部分组成? 答:指令中的逻辑地址由段基址和偏移量组成。 6. 以下为用段基址:偏移量形式表示的内存地址,试计算它们的物理地址。 (1) 12F8:0100 (2) 1A2F:0103 (3) 1A3F:0003 (4) 1A3F:A1FF 答: (1) 13080H (2) 1A3F3H (3) 1A3F3H (4) 245EFH 7. 自12FA:0000开始的内存单元中存放以下数据(用十六进制形式表示): 03 06 11 A3 13 01,试分别写出12FA:0002的字节型数据、字型数据及双字型数据 的值。 答:字节型数据:11H 字型数据:0A311H 双字型数据:0113A311H 8. 内存中某单元的物理地址是19318H,段基地址为1916H,则段内偏移地址为 多少?若段内偏移地址为2228H,则段基地址为多少? 答:若段基地址为1916H,则段内偏移地址为01B8H;若段内偏移地址为2228H,则段基地址为170FH 9. 在实模式环境中,一个段最长不能超过多少字节? 答:64KB 10. 实模式可寻址的内存范围是多少? 答:1MB

汇编语言程序设计

汇编语言程序设计 一、选择题 (共72题) 1、 用于指针及变址寄存器的有()。 A、 AX,BX,CX,DX B、 SP,BP,IP C、 CS,DS,SS D、 PSW 考生答案:B 2、 完成把汇编语言源程序模块转换为目标模块的程序是()。 A、 编辑程序 B、 汇编程序 C、 连接程序 D、 调试程序 考生答案:B 3、 指令JMP FAR PTR DONE中的寻址方式属于()。 A、 段内转移直接寻址 B、 段内转移间接寻址 C、 段间转移直接寻址 D、 段间转移间接寻址 考生答案:C 4、 对于下列程序段: AGAIN:MOV AL,[SI]

MOV ES:[DI],AL INC SI INC DI LOOP AGAIN 也可用()指令完成同样的功能。 A、 REP MOVSB B、 REP LODSB C、 REP STOSB D、 REPE SCASB 考生答案:A 5、 在程序执行过程中,IP寄存器中始终保存的是()。 A、 上一条指令的首地址 B、 下一条指令的首地址 C、 正在执行指令的首地址 D、 需计算有效地址后才能确定地址 考生答案:B 6、 在汇编语言程序的开发过程中使用宏功能的顺序是()。 A、 宏定义,宏调用 B、 宏定义,宏展开 C、 宏定义,宏调用,宏展开 D、 宏定义,宏展开,宏调用 考生答案:C 7、 CPU要访问的某一存储单元的实际地址称()。 A、 段地址

偏移地址 C、 物理地址 D、 逻辑地址 考生答案:C 8、 AND、OR、XOR、NOT为四条逻辑运算指令,下面解释正确的是()。 A、 指令XOR AX,AX执行后,AX内容不变,但设置了标志位 B、 指令OR DX,1000H执行后,将DX最高位置1,其余各位置0 C、 指令AND AX,OFH执行后,分离出AL低四位 D、 NOT AX,执行后,将AX清0 考生答案:C 9、 完成对CL寄存器的内容乘以2的正确操作是()。 A、 ROL CL,1 B、 MUL 2 C、 SHL CL,1 D、 SHR CL,1 考生答案:C 10、 检查两个无符号数的关系,若要实现AL≥BL时分支去LOP1处,那么在“CMP A L,BL”指令后应跟的分支指令是()。 A、 JE LOP1 B、 JAE LOP1 C、 JC LOP1 D、 JGE LOP1 考生答案:B 11、 已知变量VAR为字型,则TYPEVAR=()。

80x86汇编语言程序设计教程》(清华大学出版社,黑色封面,杨季文著)

80x86汇编语言程序设计教程》(清华大学出版社,黑色封面,杨季文著) 《计算机操作系统原理》 《Inside Windows 2000》(微软出版社,我看的是E文版的,中文的书名想必是Windows 2000 技术内幕之类吧)。 《数据结构和算法》——这门课程能够决定一个人程序设计水平的高低,是一门核心课程。我首选的是清华版的(朱战立,刘天时) 《软件工程》——这门课程是越到后来就越发现它的重要,虽然刚开始看时就象看马哲一样不知所云。我的建议是看《实用软件工程》(黄色,清华) 《Windows 程序设计》——《北京大学出版社,Petzold著》我建议任何企图设计Windows 程序的人在学习VC以前仔细的学完它。而且前面的那本 建议:你还可以在CSDN上阅读到许多书评。这些书评能够帮助你决定读什么样的书 关于编程的网站 计算机编程 郭新明-FTP服务器体验式学习课程(张孝祥监制) https://www.wendangku.net/doc/7118613470.html,/so/so138.aspx?id=3997 https://www.wendangku.net/doc/7118613470.html,快速开发新闻系统在线播放 https://www.wendangku.net/doc/7118613470.html,/so/so138.aspx?id=4708 数字电路基础[宁波电大] https://www.wendangku.net/doc/7118613470.html,/so/so138.aspx?id=774 计算机组成与汇编语言程序设计(赵丽梅)宁波电大 https://www.wendangku.net/doc/7118613470.html,/so/so138.aspx?id=1242 操作系统(陈访荣)宁波电大(在线播放) https://www.wendangku.net/doc/7118613470.html,/so/so138.aspx?id=4708 计算机网络(马敏飞)宁波电大 https://www.wendangku.net/doc/7118613470.html,/so/so138.aspx?id=1243 https://www.wendangku.net/doc/7118613470.html, 2.0快速入门(12)-https://www.wendangku.net/doc/7118613470.html, 2.0网站快速导航 https://www.wendangku.net/doc/7118613470.html,/so/so138.aspx?id=2501 Internet和Intranet应用(薛昭旺)宁波电大 https://www.wendangku.net/doc/7118613470.html,/so/so138.aspx?id=1245 2004年电脑硬件安装调试维修视频教学讲授 https://www.wendangku.net/doc/7118613470.html,/so/so138.aspx?id=4825 https://www.wendangku.net/doc/7118613470.html, 高级排错技巧 https://www.wendangku.net/doc/7118613470.html,/so/so138.aspx?id=768 SQL Server 2000管理专家系列课程 https://www.wendangku.net/doc/7118613470.html,/so/so138.aspx?id=4832 开心三人行系列(2):使用Atlas 构建AJAX应用 https://www.wendangku.net/doc/7118613470.html,/so/so138.aspx?id=2564 Visual Basic 2005开发技巧系列课程(4): 在Visual Basic 2005中使用.NET Framework 2.0新增功能 https://www.wendangku.net/doc/7118613470.html,/so/so138.aspx?id=2526 SQL Server 2005 系列课程-使用ADO https://www.wendangku.net/doc/7118613470.html,开发SQL Server 2005 OLAP应用 https://www.wendangku.net/doc/7118613470.html,/so/so138.aspx?id=2535

汇编语言程序设计A卷答案

2011级汇编语言程序设计课程试题(A卷答案) 一、填空题(毎空1分,共15分) 1.汇编语言程序/汇编语言源程序,ASM,平展(flat) 2.执行性语句(硬指令),说明性语句(伪指令) 3.立即数,寄存器,存储器 4.导入,动态连接 5.PUSH EBX 6.嵌入汇编,模块连接 7.8,6,16 二、判断题(每题1分,共10分) 1.错2.对3.对4.对5.错6.对7.对8.错9.对10.错 三、按下面要求写出相应的数据定义语句或汇编指令(变量名可任意指定)(每小题2分,共12分) 1.string byte ‘assembly language’ 2.var word 20 dup (?) 3.str equ 4.dvar dword 14h 5.add [ebx+esi],eax 6.xor eax,eax 或sub eax,eax 四、程序分析与阅读题 1.(每空1分,共8分) EAX=87654321h EBX=12345678h EAX=876543a9h CF=1 OF=0 ZF=0 SF=1 PF=1 2.(每小题2分,共8分)每一小题指出错误得1分,写出正确指令得1分 ①操作数类型不一致add eax,ebx 或add ax,bx ②两个操作数同时是内存单元的数mov eax,var2 mov var1,eax ③push指令不支持字节操作push ax 或push eax ④两个操作数类型不明确mov byte ptr [ebx],100 或mov word ptr [ebx],100 或mov dword ptr [ebx],100 3.(每小题2分,共4分) ①xchg ebx,[edi] 或xchg [edi],ebx ②movsb

2位数计算器程序-汇编语言课程设计

信息学院课程设计题目:2位数计算器程序设计 __ 姓名: __ _____ 学号: ____ ___ 班级: 课程:汇编语言 ________ 任课教师:侯艳艳 ____ 2011年12月

课程设计任务书及成绩评定

目录 摘要 (2) 1.设计目的………………………………………………………………………………………………?2 2.概要设计………………………………………………………………………………………………?3 2.1系统总体分析…………………………………………………………………………?3 2.2程序流程图 (3) 3.详细设计......................................................................................................? (4) 3.1主程序及子程序说明 (4) 3.2程序代码编写 (4) 4.程序调试 (6) 4.1运行界面分析 (6) 4.2算法的分析 (6) 4.3调试过程及分析 (6) 5.心得体会 (7) 5.1设计体会...................................................................................................? (7) 5.2系统改进...................................................................................................? (7) 参考文献 (8)

新版汇编语言程序设计钱晓捷第1章习题答案

第1章汇编语言基础知识(全) 2010-10-18 19:32:40| 分类:答案集锦| 标签:|字号大中小订阅 第1章汇编语言基础知识 〔习题1.1〕简述计算机系统的硬件组成及各部分作用。 〔解答〕 CPU:包括运算器、控制器和寄存器组。运算器执行所有的算术和逻辑运算;控制器负责把指指令逐条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为 处理单元提供所需要的数据。 存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。 外部设备:实现人机交换和机间的通信。 〔习题1.2〕明确下列概念或符号: 主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB 〔解答〕 主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU可以直接存取,它由半导体存储器芯片构成其成本高、容量小、但速度快。辅存是辅助存储器的简称,辅存可用来长期保存大量程序和数据,CPU需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速 度慢。 RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电 后能保存信息。 存储器由大量存储单元组成。为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常 称做I/O端口。 KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。 〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序? 〔解答〕 用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编 译通过的程序就是目标程序。

汇编语言程序设计

汇编语言程序设计 实验报告 实验名称上机过程及顺序结构与分支结构程序设计实验班级 学号 姓名 日期2017年10月26号 成绩 评阅人 软件学院

一、实验目的与意义 理解并熟练掌握汇编语言程序设计过程中的编辑、汇编、链接和调试等各个步骤,提高对汇编课程内容的理解和汇编语言的掌握,通过上机练习加深对课程内容的理解和掌握。通过汇编语言编制的程序上机调试、运行检验程序设计是否正确。熟悉和掌握编辑、汇编、连接和调试四个实用程序的使用方法,掌握调试程序中的几个常用命令的使用方法。熟悉其基本的指令操作,debug调试操作命令以及分支结构、顺序结构和循环结构的程序设计。 二、实验环境 操作系统:Microsoft Windows8 集成环境:Masm for Windows 上机地点:信息楼B405教室 三、实验的预习内容 预习的主要内容: 1. 使用DEBUG命令的方法; 2. 熟悉掌握从理论上定义数据的类型(即DB,DW,DD,); 3. 分支结构和顺序结构的步骤以及相关的指令; 4. 常用的标志位状态及相应的作用; 实验思路: 在对题目进行分析后,分析出解题方法,并做出与实验思路相对应的程序框图。依照程序框图的内容输入相对应的代码,最终在调试代码后,发现并解决一系列的汇编语言错误。进一步优化算法。实验之前必须了解十进制、十六进制和ASCII码之间的转换。预习查表法相关命令,掌握顺序程序的结构,从键盘输入数据的命令及显示到屏幕上的命令。 实验一: 题目1:将程序编辑、汇编、连接并通过集成环境中的debug调试,观察运行结果;用E命令修改指定地址的数据,再用G命令执行程序查看变化,用A 命令将加法指令修改成减法指令,再将其编译运行,查看寄存器值变化的异同。 题目2:分别用DB、DW和DD数据段9H,0FAH,41H,27H,编译链接之后生成exe文件,再用debug的r命令找到数据段地址,用d命令指定数据段地址,观察汇编后在机器内部对应的存储情况。 实验二: 先设置数据段地址和堆栈段地址;设置堆栈段指针;读取一个字符然后存储在AL中;用BX来存储AL中字符对应的数值;将BX中的值作为偏移地址;并在数据段中查找对应字符串;最终输出结果结束程序。 实验三: 先初始化数据段地址与堆栈段地址;设置堆栈段指针;然后将数据段中的data1放入AL中;读取数据段中的data2并判断data2是否大于0;然后读取数

汇编语言程序设计(钱晓捷)课后答案

汇编语言程序设计(第二版) 钱晓捷习题答案 第二章(01) 2.1 (1)AX=1200h (2)AX=0100h (3)AX=4C2Ah (4)AX=3412h (5)AX=4C2Ah (6)AX=7856h (7)AX=65B7h 2.2(1) 两操作数类型不匹配 (2) IP指令指针禁止用户访问 (3) 立即数不允许传给段寄存器 (4) 段寄存器之间不允许传送 (5) 两操作数类型不匹配 (6) 目的操作数应为[ BP ] (7) 源操作数应为[BX+DI] (8) 立即数不能作目的操作数 2.3 lea bx,table ;获取table的首地址,BX=200H mov al,8 ;传送欲转换的数字,AL=8 xlat ;转换为格雷码,AL=12H 2.4 堆栈是一种按“先进后出”原则存取数据的存储区域。 堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH和POP。 2.5 mov ax,8057h push ax mov ax,0f79h push ax pop bx ;bx=0f79h pop [bx] ;DS:[0f79h]=8057h 2.6 AL=89h CF ZF SF OF PF AL=12h 1 0 0 1 1 AL=0afh 0 0 1 0 1 AL=0afh 1 0 1 0 1 AL=00h 0 1 0 0 1 AL=0ffh 0 0 1 0 1 AL=00h 0 1 0 0 1 2.7 W=X+Y+24-Z

2.8 (1)ADD DX,BX (2)ADD AL,[BX+SI] (3)ADD [BX+0B2H],CX (4)ADD WORD PTR [0520H],3412H (5)ADD AL,0A0H 2.9;为了避免与操作数地址混淆,将题中X,Y,Z,V 字操作数改为A,B,C,D mov ax,X ;ax=A imul Y ;dx,ax = A*B (将操作数看作符号数,以下同) mov cx,ax mov bx,dx ;bx,ax <-- dx,ax =A*B mov ax,Z ;ax = C cwd ;dx,ax =C (扩展符号后为双字) add cx,ax adc bx,dx ;bx,cx <-- bx,cx+dx,ax=A*B+C sub cx,540 sbb bx,0 ;bx,cx<-- A*B+C-540 mov ax, V ;ax= D cwd ;dx,ax= D (扩展符号后为双字) sub ax, cx sbb dx, bx ;dx,ax = dx,ax - bx,cx = D-(A*B+C-540) idiv X ;运算结果:[D-(A*B+C-540h)]/A ;ax存商,dx存余数 2.10;(1)xchg的操作数不能是立即数 (2不能对CS直接赋值 (3)两个操作数不能都是存储单元 (4)堆栈的操作数不能是字节量 (5)adc的操作数不能是段寄存器 (6)没有确定是字节还是字操作 (7)in不支持超过FFH的直接寻址 (8)out只能以AL/AX为源操作数 第二章(02) 2.11; 指令AX的值CF OF SF ZF PF Mov ax,1407h1470h----- And ax,ax1470h00000 Or ax,ax1470h00000 Xor ax,ax000011 Not ax0ffffh----- Test ax,0f0f0h0ffffh00101 注意: 1. mov, not指令不影响标志位 2. 其他逻辑指令使CF=OF=0, 根据结果影响其他标志位。

汇编语言程序设计教程(第3版 卜艳萍)参考答案

汇编语言程序设计教程(第3版) 习题参考答案 第1章汇编语言基础知识 思考与练习 1.计算机系统分哪几个层次?简述计算机系统的硬件结构。 1)数字逻辑层 2) 微体系结构层 3) 指令系统层 4) 操作系统层 5) 汇编语言层 6) 高级语言层 7) 应用层 硬件系统是指构成计算机系统的物理实体或物理装置。它由控制器、运算器、存储器、输入设备和输出设备等部件构成。 2.简述用汇编语言进行程序设计的必要性。 1)程序要具有较快的执行时间,或者只能占用较小的存储容量。例如,操作系统的核 心程序段,实时控制系统的软件,智能仪器仪表的控制程序等。 2)程序与计算机硬件密切相关,程序要直接、有效地控制硬件。例如,I/O接口电路 的初始化程序段,外部设备的低层驱动程序等。 3)大型软件需要提高性能、优化处理的部分。例如计算机系统频繁调用的子程序、动 态连接库等。 4)没有合适的高级语言或只能采用汇编语言的时候。例如,开发最新的处理器程序时, 暂时没有支持新指令的编译程序。 5)汇编语言还有许多实际应用,例如分析具体系统尤其是该系统的低层软件、加密解 密软件、分析和防治计算机病毒等。 3.汉字编码主要分哪几类?每类的功能如何? 汉字编码主要分为四类:汉字输入码、汉字交换码、汉字机内码和汉字字形码。 1)为了能直接使用西文标准键盘进行输入,就必须为汉字设计相应的编码方法,即用 西文标准键盘上的字母数字串表示汉字的编码。目前,汉字输入编码方法主要有三 种:数字编码、拼音编码和字形编码。 2)汉字交换码:在不同汉字信息处理系统间进行汉字交换时所使用的编码,就是国标 码。无论采用哪种方法输入汉字,一旦输入到计算机中,必须采用统一的国标码标 识每个汉字。 3)汉字机内码是汉字在设备或信息处理系统内部最基本的表达形式,是在设备和信息 处理系统内部存储、处理、传输汉字用的编码。 4)字形编码也称为字模码,是用点阵表示的汉字字形代码,它是汉字的输出形式。4.计算机的字长是怎么定义的,试举例说明。 计算机能同时处理二进制信息的位宽定义为计算机的字长。如8086能同时进行16位二进制数据的运算、存储和传输等操作,该机器的字长为16位。 5.在汇编语言中,如何表示二进制、八进制、十进制和十六进制的数值? 用相应进制的数值加上进制标记即可。

汇编语言程序设计方案考试考试集

汇编语言程序设计方案考试考试集第四章汇编语言程序设计习题集 一、单项选择题 1.用高级语言编写的程序()。 A.只能在基本种计算机上运行 B.无需经过编译或解释,即可被计算机直接执行 C.具有通用性和可移植性 D.几乎不占用内存空间 2.一般地,我们将计算机指令的集合称为()。A.机器语言 B.汇编语言 C.模拟语言 D.仿真语言 3.我们通常所说的“裸机”指的是()。 A.只装备有操作系统的计算机 B.不带输入输出设备的计算机 C.未装备任何软件的计算机 D.计算机主机暴露在外 4.计算机的软件系统一般分为()两大部分。 A.系统软件和应用软件 B.操作系统和计算机语言 C.程序和数据 D.DOS和Windows 5.计算机系统软件中的汇编程序是一种()。 A.汇编语言程序

B.编辑程序 C.翻译程序 D.将高级语言转换成汇编程序的程序 6.假设V1和V2是用DW定义的变量,下列指令中正确的是:() A.MOV V1,20H B.MOV V1,V2 C.MOV AL,V1 D.MOV2000H,V2 7.PC机所使用的标准键盘向主机发送的代码是() A.ASCII码 B.扫描码 C.BCD码 D.格雷码 8.8086CPU中断号为8的中断矢量存放在()。 A.0FFFFH:0008H B.0000H:0008H C.0000H:0020H D.0020H:0000H 9.已知变量VAR为字型,则TYPE VAR=()。 A.1 B.2 C.3 D.4 10.汇编语言源程序经MASM汇编后可直接生成的文件是()。

B..CRF C..EXE D..OBJ E..ASM F..MAP 11.段定义语句以(B)语句结束。 A.END B.ENDS C.ENDP D.ENDM 12.若主程序段中数据段名为DA TA,对数据段的初始化操作应为()。 A.MOV AX,DATA B.MOV AX,DA TA MOV ES,AX MOV DS,AX C.PUSH DS D.MOV DS,DATA 13..EXE文件产生在()之后。 A.汇编 B.编辑 C.用软件转换

汇编语言程序设计 实验1

汇编语言程序设计实验1——汇编程序与调试器的使用 一、实验目的 熟悉DOS操作系统环境下的汇编程序MASM的使用、掌握DEBUG的基本命令及其功能。 二、实验内容 1.编写一个小程序,从键盘接收一个大写字母,存放到指定的内存单元BUFF1,并转换其为对应的小写字母,存放到指定的内存单元BUF2中。上机编辑、汇编、连接并运行该程序。 2. 输入源程序、汇编、连接并执行相应程序,并用DEBUG 实现以下操作: (1)用反汇编命令查看相应程序的可执行语句序列,分析其与源程序的异同,查看相应程序占用内存单元的字节数。 (2)用数据查看命令查看执行前的数据单元的内容。 (3)分别用P命令和T命令逐步执行程序,分析这两种方式的区别,记录“转换为小写字母”指令执行后的状态字。 (4)查看程序执行后数据单元的内容。 (5)查看0000:0000 起始的32个单元的内容。 (6)用汇编命令编写一个简单加法程序“3+5=8”,加数和结果分别存在内存单元NUM1、NUM2、NUM3中。 三、实验要求 学生要提前做好相关内容的预习(包括源程序的分段组织、DEBUG的系列命令等),熟悉被调试的程序(学生应当在本实验中自行设计一些汇编语言程序,其目的是熟悉相关编程环境的特性),并对程序的测试/调试过程(包括所用的编程环境命令、DEBUG命令等)作出详细计划。 认真完成实验,正确记录各项数据,记录实验过程中出现的问题及其解决过程。 四、实验报告 写出各实验程序的测试/调试的详细过程(包括DEBUG命令的使用等),特别是要写出在DEBUG状态下编写、运行程序的过程。要系统给出各程序在测试/调试过程中所遇到的问题、解决问题的方法与途径。要对程序在测试/调试过程中的问题进行分析,对相关的执行结果进行分析。

汇编语言程序设计

实验四程序设计 一、实验目的 学习数据传送指令和算术运算指令的用法;掌握数据定义伪指令的格式,会用DEBUG 中的D命令观察DB、DW、DD存储数据的格式;熟悉汇编语言的基本框架,掌握编写汇编语言程序的基本方法。 二、实验题 1、已知当前数据段中DADT1和DADT2开始分别存放若干字节数据,数据个数相同,编制程序检查两数据块中数据是否相同,若相同,则在屏幕上显示1,否则显示0。 【参考程序如下】 DSEG SEGMENT DATA1 DB 'ABCDEFG3' DATA2 DB 'ABCDEF3G' CNT DW 8 DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START:MOV AX,DSEG MOV DS,AX MOV DL,31H LEA SI,DATA1 LEA DI,DATA2 MOV CX,CNT DEC SI DEC DI AGAIN:INC SI INC DI MOV AL,[SI] CMP AL,[DI] LOOPZ AGAIN JZ DISP DEC DL DISP: MOV AH,2

INT 21H MOV AH,4CH INT 21H CSEG ENDS END START 阅读程序,理解循环程序结构及执行过程,并改成串指令实现。 2 编写程序,将00H~0FH共16个数写入内存3000H开始的连续16个存储单元中。 三、实验报告 写出程序清单,记录运行结果。 改写串指令实现: DSEG SEGMENT DATA1 DB'ABCDEFG3' DATA2 DB'ABCDEF3G' CNT DW8 DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START:MOV AX,DSEG MOV DS,AX MOV ES,AX MOV DL,31H LEA SI,DATA1 LEA DI,DATA2 MOV CX,CNT CLD

IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社)解析

IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社) (沈美明,温冬蝉著) 第二章 1.解答:有256个 2.解答:如下图.第一个络子为000B0H字单元,注意,是字单元,第五个格子为000B3H字单元 E5 1E 3C 2A 3.解答: 30022H字节单元内容: ABH 30024H字节单元内容: EFH 30021H字单元内容: AB34H 30022H字单元内容: CDABH 4.解答: 这三个物理地址都是3017AH,说明了不同的段地址和偏移地址对应同一物理地址 5.解答: CS+IP 第一个字的物理地址为: 0AAA40H 6.解答: 条件标志OF,SF,ZF,CF,的值依次为:0,0,0,0 7.下列操作可使用那些寄存器? (1)加法和减法AX,BX,CX,DX,当然,还有这几个通用寄存器的高低位了,如AH ,AL等(2)循环计数 CX (3)乘法和除法DX,AX,AH,AL (4)保存段地址CS ,DS,ES,SS (5)表示运算结果为O FLAGS (6)将要执行的指令地址IP (7) 将要从堆栈取出数据的地址BP,SP,SS 8.可以用来指示存储器地址的寄存器有:BX,SP,BP,DI,CS,DS,SI,ES,SS,IP 9.一一对应; 5--A 4--B 2--C 3--D 12--E 9--F 11--G 10--H 13--I 8--J 7--K 6---L 1--M 15--N 14--O 第三章 1.(1)立即寻址没有 (2)直接寻址7237H (3)使用BX的寄存器寻址没有 (4)使用BX的间接寻址 637DH (5)使用BX的寄存器相对寻址0D5B4H (6)基址变址寻址8E18H (7)相对基址变址004FH 2.根据下列要求,写出相应的汇编指令。 (1)ADD DX,BX (2) ADD AL,[BX][SI] (3) ADD [BX][0B2H], CX (4) MOV AX,2A59H ADD [0524H] ,AX (5) ADD AL ,0B5H

相关文档
相关文档 最新文档