当前位置:文档之家› 汇编语言 第七章 子程序设计

汇编语言 第七章 子程序设计

汇编语言 第七章 子程序设计
汇编语言 第七章 子程序设计

第七章子程序设计

返回目录

练习题

7.4.1 单项选择题

1.在子程序中,如果利用堆栈保护现场,在恢复现场时,先压入堆栈的内容()。

A.先弹出堆栈 B.后弹出堆栈 C.不分先后弹出堆栈 D.任意弹出堆栈

2.下列叙述不正确的是()。

A.在子程序中的现场保护只能用堆栈来实现。

B.在子程序中的现场保护用堆栈来实现是其中的一种方法。

C.在子程序中的现场保护可以有多种实现方法。

D.在子程序中的现场保护可以将要保护的内容送内存变量来实现。

3.下列定义子程序的是()。

A. PNAME PROC B. PNAME PROC

PNAME ENDS ENDM

C. PNAME PROC D. PNAME PROC

PNAME ENDP PNAME END

4.子程序重定位可选在内存中的整个区域内,在进行程序

设计时,子程序应采用()。

A.绝对地址 B.相对地址 C.逻辑地址

D.物理地址

5.下列叙述不正确的是()。

A.在子程序中可以再次调用子程序。

B.在主程序中一般用跳转指令转移到子程序。

C.在子程序中一般用返回指令返回到主程序。

D.在主程序中一般用调用指令转移到子程序。

6.下列叙述正确的是()。

A.执行一条段内返回指令,先从堆栈弹出两个字节

的内容,然后SP指针减2。

B.执行一条段内返回指令,先SP指针减2,然后从

堆栈弹出两个字节的内容。

C.执行一条段内返回指令,先SP指针加2,然后从堆栈弹出两个字节的内容。

D.执行一条段内返回指令,先从堆栈弹出两个字节的内容,然后SP指针加2。

7.下列叙述正确的是()。

A.执行一条段间调用指令,先将CS、IP的内容压栈,然后将目的地址送CS和IP。

B.执行一条段间调用指令,先将目的地址送CS和IP,然后将CS、IP的内容压栈。

C.执行一条段间调用指令,先将CS、IP的内容压栈,然后SP指针加2。

D.执行一条段间调用指令,先将CS、IP的内容压栈,然后SP指针减2。

8.下列叙述不正确的是()。

A.在汇编语言程序中,每一个过程允许有多条RET 指令。

B.在汇编语言程序中,每一个过程只允许出现一条RET指令。

C.在汇编语言程序中,每一个过程结束之前一定有一条RET指令。

D.在汇编语言程序中,以过程形式表示的代码段一

定有一条RET指令存在。

9.下列叙述中属于子程序嵌套的是()。

A.主程序调用子程序1

B.主程序调用子程序2

C.主程序调用子程序3

D.子程序1调用子程序2

10.下列叙述中属于子程序直接递归调用的是()。

A.子程序1调用子程序2

B.子程序2调用子程序3

C.子程序3调用子程序4

D.子程序4调用子程序4

11.在进行DOS功能调用前,其功能号应先送()。

A.AH寄存器 B.BH寄存器 C.CH寄存器

D.DH寄存器

12.执行“INT 10H”指令时,中断向量地址是()。

A.10H B.20H C.30H D.40H

13.执行“INT 10H”指令时,其中断处理程序的入口地址

存放在()。

A.10H~13H B.20H~23H C.30H~33H D.40H~43H

14.执行“INT 10H”指令时,压入堆栈的内容有()。

A.PSW、CS、IP B.CS、IP C.PSW、IP D.PSW、CS

15.在进行字符串显示的DOS功能调用时,要求字符串的最

后一个字符是()。

A.0 B.‘0’ C.‘$’ D.0DH

7.4.2 多项选择题

1.一般的子程序说明文件有()。

A.子程序名 B.功能描述 C.入口

参数 D.出口参数

2.在子程序的设计中,通常采用现场保护和现场恢复的方

法有()。

A.寄存器法 B.堆栈法 C.约

定单元法 D.变元法

3.子程序的参数传递方法有()。

A.寄存器法 B.约定单元法 C.堆栈法

D.变元法

4.下列叙述中属于子程序嵌套的有()。

A.子程序1调用子程序2,子程序2调用子程序3。

B.主程序调用子程序2。

C.主程序调用子程序3。

D.子程序3调用子程序4。

5.下列叙述中属于子程序递归调用的有()。

A.子程序1调用子程序2,子程序2调用子程序3。

B.子程序2调用子程序3,子程序3调用子程序2。

C.子程序3调用子程序4,子程序4调用子程序3。

D.子程序3调用子程序3。

6.在执行“CALL FAR PTR M”指令后,完成的操作有()。

A.CS、IP入栈 B.SP+2 C.SP+4 D.目的地址送CS、IP

7.下列叙述正确的有()。

A.如果主程序和子程序A在同一代码段,则用“CALL A”可以实现子程序的调用。

B.如果主程序和子程序A不在同一代码段,则用“CALL A”可实现子程序的调用。

C.如果主程序和子程序A在同一代码段,则用“CALL FAR PTR A”可以实现子程序的调用。

D.如果主程序和子程序A不在同一代码段,则用“CALL FAR PTR A”可以实现子程序的调用。

8.下列叙述不正确的有()。

A.在子程序设计中,不论采用什么参数传递方法,须将所有寄存器的内容保护起来。

B.在子程序设计中,为了防止寄存器内容被破坏,

通常将有关寄存器内容保护起来。

C.在子程序设计中,都是采用寄存器法传递参数。 D.在子程序设计中,子程序都只安排一个出口。

9.在进行字符串输入的DOS功能调用时,输入字符串缓冲区中的内容是()。

A.第一单元存放字符个数。

B.第二单元存放的是实际输入字符的个数。

C.第三单元开始存放输入字符的ASCII码。

D.最后一个单元存放回车符。

10.如果要将BUF字符缓冲区的内容显示输出,在采用DOS 功能调用前,必须()。

A.将BUF字符缓冲区的段地址送DS。

B.将BUF字符缓冲区的段地址送ES。

C.将BUF字符缓冲区的偏移地址送DX。

D.将功能号9送AH寄存器。

7.4.3 填空题

1.调用子程序通常用指令,返回调用程序通常用指令。

2.在子程序的设计中,通常用堆栈来保护现场和恢复现场。而堆栈的操作原则是。

3.如果主程序和子程序在同一个代码段,则主程序调用子程序时只改变地址。如果主程序和子程序不在同一

个代码段,则主程序调用子程序时要改变地址。 4.在调用程序中调用子程序的CALL指令执行后,压人堆栈的内容是指令的下一条指令的地址。在子程序中的RET指令将返回指令继续执行程序。

5.子程序(过程)的定义是以“过程名”开始,以“过程名”结束。

6.在调用子程序前,如果将要参加运算的数送寄存器,这种参数传递方法称为;如果将要参加运算的数送指定的内存单元,这种参数传递方法称为;如果将要参加运算的数压入堆栈,这种参数传递方法称为。 7.一个子程序调用另一个子程序称为;一个子程序直接或间接调用该子程序本身称为。

8.以过程定义的子程序有两种类型的属性,他们分别是和。

9.在程序设计中,利用堆栈不仅可以保存,而且还可以保存主程序和子程序之间传递的参数,这些参数既可以是,也可以是。

10.在程序的执行过程中,近程调用时CALL指令执行完后压入堆栈的内容是字节,远程调用时CALL指令执行完后压入堆栈的内容是字节。

11.在编制子程序时,的使用是十分频繁的,它不仅可以用来保存返回的地址,而且还可以用来存放主程序与

子程序之间传递的。

12.子程序的正确执行是由主程序中的指令和子程序的指令来完成的。

13.在进行“INT 45H”功能调用时,其中断类型号为,调用的功能号应送。

14.DOS系统功能调用是根据中断类型号从中断向量表中取中断处理程序的入口地址。每一个中断处理程序的入口地址占用内存字节,其中的低地址字用来存放中断处理程序的,高地址字用来存放中断处理程序的。

15.中断向量表占用内存字节,它的物理地址范围是。

16.在DOS系统功能调用中,01号功能调用表示,它的出口参数在中。02号功能调用表示,它的入口参数在中。

17.在DOS系统功能调用中,要实现字符串显示输出应使用号功能调用,要实现字符串输入应使用号功能调用。

18.在进行字符串输入的DOS系统功能时,如果键盘输入字符“345A”后按回车键,则在键盘输入缓冲区的第二单元的值是,在第三到第七单元的值依次是。19.在进行字符串显示输出的DOS系统功能时,要求输出字

符串以结尾。

20.在进行DOS功能调用时,压入堆栈的内容是。7.4.4 简答题

1.简述在程序设计中,采用子程序结构有哪些优点?

2.简述过程的定义与子程序的定义有何区别?

3.简述一个完整的子程序结构应包含哪几方面的内容?4.在子程序的设计过程中,子程序的现场保护和现场恢复通常采用哪几种方法?哪一种方法使用较为方便?

5.调用程序和子程序之间一般使用哪几种参数的传递方法?他们各自的特点是什么?

6.简述段内调用和段间调用时堆栈有何不同?

7.简述子程序嵌套调用的基本原理。

8.简述递归调用的基本原理。

9.简述DOS系统功能调用的使用方法。

10.简述DOS系统功能调用和中断返回时堆栈的变化?7.4.5 程序分析题

1.现有程序如下:

STACK SEGMENT STACK ‘STACK’

DW 100 DUP(0)

STACK ENDS

DATA SEGMENT

BUF DB 100 DUP(0)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATA

MOV DS,AX

MOV AX,STACK

MOV SS,AX

LEA DI,BUF

L: MOV AH,1

INT 21H

CMP AL,0DH

JZ EXIT

CALL STO

JMP L

EXIT: MOV BYTE PTR[DI],‘$’LEA DX,BUF

MOV AH,9

INT 21H

MOV AH,4CH

INT 21H

STO PROC

CMP AL,30H

JB NEXT

CMP AL,39H

JA NEXT

MOV [DI],AL

INC DI

NEXT: RET

STO ENDP

CODE ENDS

END START

请回答:(1)STO子程序完成的功能是什么?

(2)该程序完成的功能是什么?

2.现有程序如下:

STACK SEGMENT STACK ‘STACK’

DW 100 DUP(0)

STACK ENDS

DATA SEGMENT

BUF 1 DB 100 DUP(?)

BUF2 DB 200,0,200 DUP(0)

EQ DB ‘两个字符串相等!$’

NEQ DB ‘两个字符串不相等!

$’

FLAG DB 0

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATA

MOV DS,AX

MOV EX,AX

MOV AX,STACK

MOV SS,AX

LEA DX,BUF2

MOV AH,0AH

INT 21H

MOV CX,100

LEA SI,BUF1

LEA DI,BUF2+2

CALL SCMP

CMP FLAG,0

JZ N

LEA DX,EQ

MOV AH,9

INT 21H

JMP EXIT

N: LEA DX,NEQ

MOV AH,9

INT 21H

EXIT: MOV AH,4CH

INT 21H

SCMP PROC

PUSH AX

MOV AH,[DI-1]

MOV AL,9

MOV AH,0

CMP AX,CX

JZ R

CLD

CMPSB

JNZ R

MOV FLAG,0FFH

JMP R1

R: MOV FLAG,0 R1: POP AX

RET

SCMP ENDP

CODE ENDS

END START

请回答:(1)SCMP子程序完成的功能是什么?

(2)该程序完成的功能是什么? 3.现有程序如下:

STACK SEGMENT STACK ‘STACK’

DW 100 DUP(0)

STACK ENDS

DATA SEGMENT

BUF DB 20

C DB 4

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATA

MOV DS,AX

MOV AX,STACK

MOV SS,AX

MOV BL,C

MOV SI,BUF

L1: PUSH SI

CALL SUBP1

CALL SUBP2

POP SI

INC SI

DEC BL

JNZ L1

MOV AH,4CH

INT 21H

SUBP1 PROC

PUSH AX

PUSH DX

L2: MOV DL,20H

MOV AH,2

INT 21H

DEC SI

JNZ L2

POP DX

POP AX

RET

SUBP1 ENDP

SUBP2 PROC

PUSH AX

PUSH DX

MOV CX,8

L3: MOV DL,‘*’

MOV AH,2

INT 21H

LOOP L3

MOV DL,0DH

MOV AH,2

INT 21H

MOV DL,0AH

MOV AH,2

INT 21H

POP DX

POP AX

RET

SUBP2 ENDP

CODE ENDS

END START

请回答:(1)SUBP1子程序完成的功能是什么?

(2)SUBP2子程序完成的功能是什么?

(3)该程序完成的功能是什么?4.现有程序如下:

STACK SEGMENT STACK ‘STACK’

DW 100 DUP(0)

STACK ENDS

DATA SEGMENT

A D

B 30

B DB 9

C DW 5

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATA

MOV DS,AX

MOV AX,STACK

MOV SS,AX

MOV CX,C

MOV BH,B

MOV BL,A

L1: PUSH BX

CALL SUBP1

CALL SUBP2

POP BX

INC BL

SUB BH,2

LOOP L1

MOV AH,4CH

INT 21H

SUBP1 PROC

PUSH AX

PUSH DX

L2: MOV DL,20H

MOV AH,2

INT 21H

DEC BL

JNZ L2

POP DX

POP AX

RET

SUBP1 ENDP

SUBP2 PROC

PUSH AX

PUSH DX

L3: MOV DL,‘*’MOV AH,2

INT 21H

DEC BH

JNZ L3

MOV DL,0DH

MOV AH,2

INT 21H

MOV DL,0AH

MOV AH,2

INT 21H

POP DX

POP AX

RET

SUBP2 ENDP

CODE ENDS

END START

请回答:(1)SUBP1子程序完成的功能是什么?

(2)SUBP2子程序完成的功能是什么?

(3)该程序完成的功能是什么?

5.现有程序如下:

STACK SEGMENT STACK ‘STACK’

DW 100 DUP (0)

STACK ENDS

汇编语言程序设计 知识点 V3.0

第一章 1、什么是汇编语言? 2、汇编语言程序设计过程:编辑源程序,编译(汇编),连接,运行调试 3、汇编语言特点?与机器语言一一对应,直接操作硬件,高效率(空间和时间,运行速度快,目标代码短,占用存储空间少) 4、数制转换 第2章8086计算机组织结构 1、计算机硬件系统组成:CPU、存储器、输入输出设备。 2、CPU组成:运算器、控制器、寄存器,运算器和控制器由芯片设计时设计好,不可做任何改动,程序设计员仅能在程序里使用寄存器,寄存器都有相应的名字,如AX,能在程序里直接使用寄存器是汇编语言区别于高级语言的最重要特点,这样就可以直接控制硬件系统。 3、总线结构:数据总线、地址总线、控制总线。数据总线分8位、16位、32位和64位等,多少位机就是以数据总线来划分,比如8位机、32位机。8086机是16位机,但地址总线是20位,地址总线数量决定了内存寻址空间的大小,如8086有20位地址线,那么寻址空间是:220=210*1K=1M,8086最大寻址空间为1MB,即地址范围:00000H~FFFFFH。控制总线主要传送控制信息,如读写操作,读写操作的主体是CPU,读操作是指CPU从内存或外设读取数据,写操作是指CPU把数据写到内存或外设中。 4、存储器:存储器的最小单元是字节(Byte,由8个位组成),字节的多少就是存储器的容量。每一个字节单元都有一个唯一的编号,这个编号就是字节单元的地址,此地址就是物理地址,对于8086而言,编号的形式为:XXXXXH,如85421H。如果要读写存储器,必须知道某一个字节单元的地址。多个字节单元可以组合成更大的单元(数),比如2个字节单元组合成一个字(Word),4个字节单元组合成一个双字(Double Word)等,规定:这个组合后的大单元是以最小字节单元地址为自己的地址。如85421H字节单元内容为12H,85422H 字节单元内容为34H,那么以85421H地址的字单元的内容就是3412H。 地址取最小字节单元的地址为大单元的地址。 内容排序按照“高高低低”原则:高字节放在高地址里,低字节放在低地址里。 详细请参看2.3节(P30页) 5、8086CPU寄存器 (1)通用类:AX(AH,AL)、BX(BH,BL)、CX(CH,CL)、DX(DH,DL) (2)段寄存器类:CS、DS、ES、SS (3)与偏移地址相关类:SI、DI、SP、BP (4)特殊类:IP、FLAGS 所有寄存器都是16位大小,通用类的16位又可看成2个8位的寄存器组成,区分为高8位(High)和低8位(Low),因此取名为AH和AL,其他类似。 CS:存放代码段段地址,DS:存放数据段段地址,SS:存放堆栈段段地址,ES:存放数据附加段段地址,一般作为DS的辅助使用,比如在一段程序里需要用到2个不同数据段的数据时,其中一个数据段段地址存放在DS中,另一个存放在ES中。 SI、DI:一般用于变址寻址方式,如[BX+SI]、[BX+DI], SP:堆栈段中堆栈栈顶的偏移地址,不可修改,由SS:SP逻辑地址始终指向堆栈的栈顶。 详细参看2.3.2,P32页 BP:一般也用于堆栈,可以作为SP的备份,通常也是用SS:BP逻辑地址表示,BP可以随意修改,因此通过SS:BP可以访问堆栈的任何地方。此外,BP还与BX一样,可以作为基地址

汇编语言程序设计课后习题解答宋人杰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

汇编语言程序的设计试卷与答案

汇编语言程序设计试卷 一、单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其号码填在题干后的括号内,每小题1分,共20分) 1.十六进制数88H,可表示成下面几种形式,请找出错误的表示()。 ① 无符号十进制数136 ② 带符号十进制数-120 ③ 压缩型BCD码十进制数88 ④ 8位二进制数-8的补码表示 2.指令指针寄存器是()。 ① IP ② SP ③ BP ④ PSW 3.当执行指令ADD AX,BX后,若AX的内容为2BA0H, 设置的奇偶标志位PF=1,下面的叙述正确的是()。 ① 表示结果中含1的个数为偶数 ② 表示结果中含1的个数为奇数 ③ 表示该数为偶数 ④ 表示结果中低八位含1的个数为偶数 4.完成将累加器AL清零,并使进位标志CF清零, 下面错误的指令是()。 ① MOV AL,00H ② AND AL,00H

③ XOR AL,AL ④ SUB AL,AL 5.下列指令执行后总是使CF=0,OF=0的是()。 ① AND ② NEG ③ NOT ④ INC 6.完成同指令XCHG AX,BX相同功能的指令或指令序列是()。 ① MOV AX,BX ② MOV BX,AX ③ PUSH AX POP BX ④ MOV CX,AX MOV AX,BX MOV BX,CX 7.设AH=0,AL=06H,BL=09H,执行指令 ADD AL,BL AAA 之后,其结果应是()。 ① AH=01,AL=05 ② AH=1 AL=15 ③ AH=0 AL=0FH ④ AH=0 AL=05 8.设AL=0B4H,BL=11H,指令“MUL BL”和指令“IMUL BL”分别执行后OF,CF的值为

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.调试过程中遇到的问题和解决的方法。

51汇编语言程序设计

第四章MCS-51汇编语言程序设计 重点及难点: 单片机汇编语言程序设计的基本概念、伪指令、单片机汇编语言程序的三种基本结构形式、常用汇编语言程序设计。 教学基本要求: 1、掌握汇编语言程序设计的基本概念; 2、掌握伪指令的格式、功能和使用方法; 3、掌握顺序结构、分支结构和循环结构程序设计的步骤和方法; 4、掌握常用汇编语言程序设计步骤和方法。 教学内容 §4.1汇编语言程序设计概述 一、汇编语言的特点 (1)助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,因此汇编语言能编写出最优化的程序。 (2)使用汇编语言编程比使用高级语言困难,因为汇编语言是面向计算机的,汇编语言的程序设计人员必须对计算机硬件有相当深入的了解。 (3)汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能够直接管理和控制硬件设备。 (4)汇编语言缺乏通用性,程序不易移植,各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用;但是掌握了一种计算机系统的汇编语言后,学习其他的汇编语言就不太困难了。 二、汇编语言的语句格式 [<标号>]:<操作码> [<操作数>];[<注释>] 三、汇编语言程序设计的步骤与特点 (1)建立数学模型 (2)确定算法 (3)制定程序流程图 (4)确定数据结构 (5)写出源程序 (6)上机调试程序 §4.2伪指令 伪指令是程序员发给汇编程序的命令,也称为汇编命令或汇编程序控制指令。 MCS- 51常见汇编语言程序中常用的伪指令:

第四章MCS-51汇编语言程序设计91 1.ORG (ORiGin)汇编起始地址命令 [<标号:>] ORG <地址> 2.END (END of assembly)汇编终止命令 [<标号:>] END [<表达式>] 3.EQU (EQUate)赋值命令 <字符名称> EQU <赋值项> 4.DB (Define Byte)定义字节命令 [<标号:>] DB <8位数表> 5.DW (Define Word)定义数据字命令 [<标号:>] DW <16位数表> 6.DS (Define Stonage )定义存储区命令 [<标号:>] DW <16位数表> 7.BIT位定义命令 <字符名称> BIT <位地址> 8.DA TA数据地址赋值命令 <字符名称> DATA <表达式> §4.3单片机汇编语言程序的基本结构形式 一、顺序程序 [例4-1]三字节无符号数相加,其中被加数在内部RAM的50H、51H和52H单元中;加数在内部RAM的53H、5414和55H单元中;要求把相加之和存放在50H、51H和52H单元中,进位存放在位寻址区的00H位中。 MOV R0 ,# 52H ;被加数的低字节地址 MOV R1 ,# 55H ;加数的低字节地址 MOV A ,@ R0 ADD A ,@ R1 ;低字节相加 MOV @ R0 , A ;存低字节相加结果 DEC R0 DEC R1 MOV A ,@ R0 ADDC A ,@ R1 ;中间字节带进位相加 MOV @ R0 , A ;存中间字节相加结果 DEC R0 DEC R1 MOV A ,@ R0 ADDC A ,@ R1 ;高字节带进位相加 MOV @ R0 , A ;存高字节相加结果 CLR A

汇编语言 第七章 子程序设计

第七章子程序设计 返回目录 练习题 7.4.1 单项选择题 1.在子程序中,如果利用堆栈保护现场,在恢复现场时,先压入堆栈的内容()。 A.先弹出堆栈 B.后弹出堆栈 C.不分先后弹出堆栈 D.任意弹出堆栈 2.下列叙述不正确的是()。 A.在子程序中的现场保护只能用堆栈来实现。 B.在子程序中的现场保护用堆栈来实现是其中的一种方法。 C.在子程序中的现场保护可以有多种实现方法。 D.在子程序中的现场保护可以将要保护的内容送内存变量来实现。 3.下列定义子程序的是()。 A. PNAME PROC B. PNAME PROC …

… PNAME ENDS ENDM C. PNAME PROC D. PNAME PROC … … PNAME ENDP PNAME END 4.子程序重定位可选在内存中的整个区域内,在进行程序 设计时,子程序应采用()。 A.绝对地址 B.相对地址 C.逻辑地址 D.物理地址 5.下列叙述不正确的是()。 A.在子程序中可以再次调用子程序。 B.在主程序中一般用跳转指令转移到子程序。 C.在子程序中一般用返回指令返回到主程序。 D.在主程序中一般用调用指令转移到子程序。 6.下列叙述正确的是()。 A.执行一条段内返回指令,先从堆栈弹出两个字节 的内容,然后SP指针减2。 B.执行一条段内返回指令,先SP指针减2,然后从

堆栈弹出两个字节的内容。 C.执行一条段内返回指令,先SP指针加2,然后从堆栈弹出两个字节的内容。 D.执行一条段内返回指令,先从堆栈弹出两个字节的内容,然后SP指针加2。 7.下列叙述正确的是()。 A.执行一条段间调用指令,先将CS、IP的内容压栈,然后将目的地址送CS和IP。 B.执行一条段间调用指令,先将目的地址送CS和IP,然后将CS、IP的内容压栈。 C.执行一条段间调用指令,先将CS、IP的内容压栈,然后SP指针加2。 D.执行一条段间调用指令,先将CS、IP的内容压栈,然后SP指针减2。 8.下列叙述不正确的是()。 A.在汇编语言程序中,每一个过程允许有多条RET 指令。 B.在汇编语言程序中,每一个过程只允许出现一条RET指令。 C.在汇编语言程序中,每一个过程结束之前一定有一条RET指令。 D.在汇编语言程序中,以过程形式表示的代码段一

汇编语言程序设计

汇编语言程序设计 实验报告 实验名称上机过程及顺序结构与分支结构程序设计实验班级 学号 姓名 日期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;然后读取数

汇编语言实验4-分支程序设计

汇编语言实验报告 Assembly Language Programming Lab Reports ______________________________________________________________________________ 班级: _________ 姓名:___________ 学号:___________ 实验日期:_____________ 学院: _____计算机与通信工程学院____ 专业:_______计算机科学与技术___________ 实验顺序:___实验四____ 实验名称:____________分支程序设计________________ 实验分数:_______ 考评日期:________ 指导教师: ______________________________________________________________________________ 一.实验目的 1.掌握主要的转移指令和位操作指令。 (1)无条件转移指令。Jmp理解掌握段内寻址和段间寻址方式。 (2)条件转移指令,无符号数比较转移,带符号数比较转移,cx为0转移指令(jcxz)这 些都为短转移指令,当代码过长超出-128-127的的转移范围,学会使用无条件指令 作为中间桥梁完成相应的功能。 (3)Test指令和Cmp指令。 2.掌握分支程序实现的方法。 (1)在完成一个程序的功能时,先简单列出要完成这个程序需要的步骤。 (2)根据列出的步骤画出程序框图。 (3)根据框图写代码。 3.在调试运行程序时,理解程序的加载过程。进一步掌握编辑、编译、链接、调试过程。 ______________________________________________________________________________ 二.实验环境 操作系统:windows xp 编译程序:masm 5.0 ______________________________________________________________________________ 三.实验原理 1.无条件转移指令 格式:JMP OPR 举例:JMP AA1 2.条件转移指令 格式:JZ、JNZ、JC、JNC 举例:JZ let1 3.逻辑与AND 格式:AND DST,SRC 举例:AND AL,0FH 4.循环左移,循环右移 格式:ROL、ROR 举例:ROL AX,1 ROR AL,1

汇编语言实验报告(子程序)

西安财经学院信息学院 姓名 学号 10051704 班级计本1004班 指导教师张娟 《汇编语言程序设计》实验报告 实验名子程序结构程序设计 实验室实验楼403 实验日期 2013/06/09 1、实验目的及要求 1. 学习子程序的编写,主子程序的调用 2. 不同模块间程序的调用和调试 二、实验环境 硬件环境:一台微型计算机; 软件环境:windows 7 链接程序:LINK.EXE 调试环境:DOSBOX虚拟平台。 3、实验内容 数据段中的6个字符,“ABCDEF”,调用子程序将其逐个显示出来。子程序的功能是显示一个字符。 四、实验过程 1. 通过编译程序、链接程序分别生成OBJ和EXE文件后,直接运 行查看结果如下: 2. 反汇编,查看程序的指令,如下所示:

3. 用 -d 查看数据段内存放的数据: 4. 单步执行

查看堆栈段的内容:

继续单步执行:

5、源程序清单 程序源代码如下: DATA SEGMENT MAG DB ‘ABCDEF’ DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV SI, 0 MOV CX, 6 LL: MOV DL, MAG[SI] CALL MADD INC SI LOOP LL MOV AH, 4CH INT 21H MADD PROC MOV AH, 02H INT 21H RET MADD ENDP CODE ENDS END START 6、实验体会 本次实验完成比较顺利。首先,程序是在网上找的,但是我用纸笔写下来仔细地看程序的每一行代码,都弄清楚以后,才建立的文件一步一步执行下来的。其实实验中还是遇到了一些小问题,但都能够顺利解决,所以本次实验不仅巩固了理论知识、培养了动手能力,还增加了做实验的自信心。对以后的学习都有很大的帮助。

汇编语言程序设计第3章【课后答案】

汇编语言程序设计第四版 【课后习题答案】--囮裑為檤第3章汇编语言程序格式 〔习题〕伪指令语句与硬指令语句的本质区别是什么伪指令有什么主要作用 〔解答〕 伪指令语句与硬指令语句的本质区别是能不能产生CPU动作; 伪指令的作用是完成对如存储模式、主存变量、子程序、宏及段定义等很多不产生CPU动作的说明,并在程序执行前由汇编程序完成处理。 〔习题〕什么是标识符,汇编程序中标识符怎样组成 〔解答〕 为了某种需要,每种程序语言都规定了在程序里如何描述名字,程序语言的名字通常被称为标识符; 汇编语言中的标识符一般最多由31个字母、数字及规定的特殊符号(如-,$,,@)组成,不能以数字开头。 〔习题〕什么是保留字,汇编语言的保留字有哪些类型,并举例说明。 〔解答 保留字是在每种语言中规定了有特殊意义和功能的不允许再做其它用处的字符串;汇编语言的保留字主要有硬指令助记、伪指令助记符、运算符、寄存器名以及预定义符号等。汇编语言对大小写不敏感。如定义字节数和字符串的DB就是伪指令助记符。 〔习题〕汇编语句有哪两种,每个语句由哪4个部分组成 〔解答〕 汇编语句有执行性语句和说明性语句; 执行性语句由标号、硬指令助记符、操作数和注释四部分组成; 说明性语句由名字、伪指令助记符、参数和注释四部分组成 〔习题〕汇编语言程序的开发有哪4个步骤,分别利用什么程序完成、产生什么输出文件。 〔解答〕 ⒈编辑文本编辑程序汇编语言源程序.asm ⒉汇编汇编程序目标模块文件.obj ⒊连接连接程序可执行文件.exe或

⒋调试调试程序应用程序 〔习题〕区分下列概念: (1)变量和标号 (2)数值表达式和地址表达式 (3)符号常量和字符串常量 〔解答〕 (1)变量是在程序运行过程中,其值可以被改变的量;标号是由用户自定义的标识符,指向存储单元,表示其存储内容的逻辑地址。 (2)数值表达式一般是由运算符连接的各种常数所构成的表达式,地址表达式是由名字、标号以及利用各种的操作符形成的表达式。 (3)在程序中,为了使常量更便于使用和阅读,经常将一些常量用常量定义语句定义为符号常量,被一对双引号括起来的若干个字符组成的字符序列被称为字符串常量。 〔习题〕假设myword是一个字变量,mybyte1和mybyte2是两个字节变量,指出下列语句中的错误原因。 (1) mov byte ptr [bx],1000 (2) mov bx,offset myword[si] (3) cmp mybyte1,mybyte2 (4) mov al,mybyte1+mybyte2 (5) sub al,myword (6) jnz myword 〔解答〕 (1)1000超出了一个字节范围 (2)寄存器的值只有程序执行时才能确定,而offset是汇编过程计算的偏移地址,故无法确定,改为lea bx,myword[si] (3)两个都是存储单元,指令不允许 (4)变量值只有执行时才确定,汇编过程不能计算 (5)字节量AL与字量myword,类型不匹配 (6)Jcc指令只有相对寻址方式,不支持间接寻址方式 〔习题〕OPR1是一个常量,问下列语句中两个AND操作有什么区别 AND AL,OPR1 AND 0feh 〔解答〕

汇编语言程序设计实验报告三(子程序设计实验)

汇编语言程序设计实验报告三(子程序设计实验) 一、实验目的 1、掌握主程序与子程序之间的调用关系及其调用方法。 2、掌握子程序调用过程中近程调用与远程调用的区别。 3、熟练掌握码型变换的程序。 二、实验内容 1、从键盘输入二位非压缩BCD数,存入AX寄存器中,编程实现将其转换为二进制 数,并在屏幕上显示。要求码型转换程序用远程子程序编写,字符显示用近程子程序编写。数据可循环输入,遇‘00’结束。 三、实验准备 1、预习子程序设计的基本方法,根据实验内容要求编写出实验用程序。 2、熟悉键盘输入和字符显示的程序段的编制。 四、实验步骤 1、编辑、汇编源程序,生成可执行文件。 2、执行程序,检查输入、输出结果,看是否正确。如不正确,用DEBUG检查,修改 源程序,再汇编、运行,直到程序正确为止。 3、用DEBUG的T命令或P命令跟踪程序的执行,观察在远程和近程调用过程中,堆 栈的变化情况。 五、实验报告要求 1、分析近程调用和远程调用的主要区别。用DEBUG命令观察执行过程有何不同。 2、分析实验结果及所遇到的问题的解决方法。 主程序流程图 转换子程序TRAN流程图

七、程序清单 STA SEGMENT STACK ’STACK’ DB 100 DUP(0) STA ENDS GSAG SEGMENT PARA ‘CODE’ ASSUME CS:CSAG MAIN PROC FAR STRA T: PUSH DS SUB AX,AX PUSH AX REV: MOV AH,1 INT 21H MOV BL,AL INT 21H MOV AH,AL MOV AL,BL CMP AX,3030H JE ENDTRAN CALL NEAR PTR TRAN CALL FAR PTR CON MOV AL,0DH CALL FAR PTR DISP MOV AL,0AH CALL FAR PTR DISP MOV AL,0AH CALL FAR PTR DISP JMP REV ENDTRAN: RET MAIN ENDP TRAN PROC NEAR AND AX,0F0FH MOV BL,AL MOV BL,AL MOV CL,3 SHL AL,CL MOV CL,1 SHL BL,CL ADD AL,BL ADD AL,AH RET TRAN ENDP CSAG ENDS CSBG SEGMENT PARA’CODE’ ASSUME CS:CSBG

第3章_单片机的汇编语言与程序设计题解

第3章单片机的汇编语言与程序设计习题 1.MCS-51单片机有哪几种寻址方式?适用于什么地址空间? 答:MCS-51单片机有7种寻址方式:直接寻址、寄存器寻址、寄存器间接寻址、立即寻址、变址寻址、位寻址、相对寻址。 直接寻址方式:操作数的地址由指令直接给出,适用于片内RAM的所有地址空间;如MOV A,68H MOV A,PSW 寄存器寻址方式:指令给出的是寄存器的编码,操作数在编码指定的寄存器中,适用于片内00H至1FH的32个字节,用R0,…,R7表示,通过PSW的RS1和RS0选择组号确定对应32个字节中的其中8个,还有累加器A,以及乘除法指令中的A和B寄存器,位寻址方式中的布尔累加器C; MOV A,R1 MUL AB INC DPTR 寄存器间接寻址方式:指令给出的是寄存器的编码,操作数地址在编码指定的寄存器中,适用于片内RAM的全部空间,其中52系列中的80H至FFH只能用寄存器间接寻址;如 MOV A,@R0 MOV A,@R1 MOVX A,@DPTR 立即寻址方式:操作数本身在指令中直接,给出适用于用8位立即数对片内RAM所有地址单元赋值,也可用16位立即数对DPTR赋值;如 MOV A,#0E2H MOV DPTR,#2000H 变址寻址方式:以DPTR或PC作为基地址寄存器,以累加器A作为变址寄存器,将基址寄存器与变址寄存器的内容相加形成操作数的实际地址的一种寻址方式,变址寻址方式适用于程序存储器ROM,仅有三条指令如下: MOVC A,@A+DPTR MOVC A,@A+PC JMP @A+DPTR 位寻址方式:指令中直接给出操作数所在单元的位地址,适用于片内RAM 中地址20H至2FH中的16个字节中的128个位地址空间和80H至FFH中地址中可以被8整除的所有SFR中的每个位地址空间;如 MOV C,7FH MOV F0,C MOV C,ACC.7 相对寻址方式:为相对转移指令而设,指令中直接给出转移的相对偏移量,其转移目标在当前指令-128至+127字节范围内的地址空间。如 SJMP START HERE: SJMP HERE ;等效于:SJMP $ 2.MCS-51单片机的PSW程序状态字中无ZERO(零)标志位,怎样判断某内部数据单元的内容是否为零?

汇编语言分支结构程序设计

实验七分支结构程序设计 一、实验目得 掌握条件转移指令得使用方法及指令对标志寄存器中各标志位得影响;掌握标志位与转移指令之间得关系;会用条件转移指令与无条件转移指令设计多分支结构程序;掌握设置断点调试程序得方法。 二、示例 1、内存自BUF单元开始得缓冲区连续存放着10个学生得英文分数,编程序统计其中90~ 100,60~89,60以下者各有多少人?并把90—100分人数结果存放在P1单元中、60-89分人数结果存放在P2单元中,60分以下人数结果存放在P3单元中(P1、P2、P3为数据段得单元),最后把P1、P2、P3中得数以"P1=?、P2=?、P3=?”显示在屏幕上。(注:数据以10进制显示) DATA SEGMENT BUF DB70H,58H,50H,91H,99H,62H,75H,82H,74H,60H ;定义BUF单元地址开始得缓冲区得数据 ORG 0020H ;程序执行时,将P1送到0200H内存单元 P1DB 0 ORG 0030H ;程序执行时,将P2送到0300H内存单元 P2DB0 ORG0040H P3 DB 0 ;程序执行时,将P3送到0400H内存单元 ORG 0050H ;程序执行时,将DP1送到0500H内存单元 DP1 DB’P1= $' ORG0060H ;程序执行时,将DP2送到0600H内存单元 DP2 DB'P2= $' ORG0070H ;程序执行时,将DP3送到0700H内存单元 DP3 DB'P3=$' ORG 0080H ;程序执行时,将COUNT送到0800H内存单元 COUNT DW 10 ;'$'为地址运算符,返回当前程序语句得地址偏移值 DATA ENDS;定义数据段 CSEG SEGMENT ASSUME CS:CSEG,DS:DATA PUSH DS ;将DS压入堆栈 SUB AX,AX;将AX内存器内容清空 PUSH AX START:MOV AX,DATA MOV DS,AX ;将数据传给数据段DS MOVCX,COUNT ;设置计数器CX,最多为10 MOV SI,0 ;给SI赋值为0 LP1:

汇编语言 分支设计

实验二分支程序设计 题目1.统计学生成绩。 要求:设有10个学生的成绩分别为56、69、84、82、73、88、99、63、100和80分。试编制程序分别统计低于60分、60~69分、70~79分、80~89分、90~99分及100分的人数,并分别存放到s5、s6、s7、s8、s9及s10单元中 DSEG SEGMENT grade DW 56,69,84,82,73,88,99,63,100,80 s5 DW 0 s6 DW 0 s7 DW 0 s8 DW 0 s9 DW 0 s10 DW 0 DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG, DS:DSEG start: MOV AX, dseg MOV DS, AX MOV CX,10 MOV BX,OFFSET grade Compare :MOV AX, [BX] CMP AX,60 JL five CMP AX,70 JL six CMP AX,80 JL seven CMP AX,90 JL eight CMP AX,100 JNE nine INC s10 JMP change_addr nine: INC s9 JMP SHORT change_addr eight: INC s8 JMP SHORT change_addr seven: INC s7 JMP SHORT change_addr six: INC s6

JMP SHORT change_addr five: INC s5 change_addr: ADD BX,2 LOOP compare MOV AX ,4c00h INT 21h CSEG ENDS END start 2)步骤: ①阅读程序,将程序补充完整。 ②输入,汇编并连接此程序。 ③在DEBUG下运行此程序,记录运行结果。 ④单步运行程序,记录前五次执行转移指令后寄存器cs ip的值。 题目2.分类统计字符个数。 1)要求,编程接收用户键入的一行字符(字符个数不超过80个,该字符串用回车符结束),并按字母、数字及其它字符分类计数,然后将结 果存入以letter、digit和other为名的存储单元中。 2)提示: 程序可采用0AH功能调用把键入字符直接送到缓冲区中,然后再逐个取出分类计数。也可采用01H功能调用在接收字符后分类计数然后再存入缓冲区中。程序需进入debug运行并查看计数结果。 Data SEGMENT letter DB ? number DB ? other DB ? buff DB 80 DB ? DB 80 DUP(?) Data ENDS Code SEGMENT ASSUME CS:CODE,DS:DATA start: MOV AX, data

《汇编语言程序设计》学习总结与心得

《汇编语言程序设计》学习总结与心得 其实说实话在学这门课之前自己对汇编语言一点都不了解,只知道它也是一种语言,而且是一门很少用的语言,可能很多人都是这么想的,或许在学这门课之前不少同学也有和我当初一样的思想,大概学学就好,反正以后很少能用到,毕竟现在高级语言这么发达,而且运用起来灵活易懂,像汇编这种低级语言又难又不易学。或许老师是知道我们之前有这种想法,所以第一节课就跟我们讲解了一下了汇编语言在当今这种高速发展的社会的作用和地位,让我们能够正确的认识汇编语言的精华,正确对待这么课。而且还在课堂了百度了汇编语言的招聘信息,或许这才是使我们正确对待汇编的最直接的原因,关系到我们以后的出路,或许我们学好了一门汇编,以后出去找工作的机会不就更广了吗?正是在这种动力的驱使下我才对汇编语言有了一个新的认识,而且决定要把它学好。 在后来的学习中我发现其实汇编不是很难学,其实学汇编就像学其他的高级语言一样,高级语言要求对语言非常了解。在学汇编的过程中,我们最重要的就是要掌握汇编语言中的指令的一些基本用法。当然要能够真正的了解其中的内涵,这样我们在实际的编程中也能够像运用高级语言一样灵活的变通。汇编语言作为一种低级程序设计语言,既然是低级所以应该是最底层的,与我们计算机内部的结构联系应该联系很密切,而且在我们学习中也深刻的了解到了这一点。比如说后来学到的寄存器、中断、还要各种寻址方式以及进栈出栈,好多的就是设计到计算机硬件。前面几章都是对计算机内部结构和一些常用的指令以及寻址方式的寻址方式。到后面学到子程序以及宏的作用才真正发现到其实跟高级语言差别不大。以C语言为例,C语言不也是由一个一个的函数组成的吗?没想到想汇编这样的低级语言也可以这样。在汇编语言的子程序和宏中,我个人更感觉宏的运用更像我们高级语言的子函数,通过定义好的宏,我们在后面直接调用就可以了。尤其是宏带参数的宏跟C语言中带参数的函数真的很像,根据参数的不同调用宏就能得到不同的结果。而汇编中的子程序没有这个传递参数这个功能。在调用子程序的时候要注意各寄存器中的内容。子程序是在程序执行期间由主程序调用的,它只占有它自身大小的一个空间,他不仅是源程序级别简化,形成的目标代码较短;而宏调用则是在汇编期间展开的,每调用依次进把宏定义体展开一次,它是源程序级的简化。因而它占有的存储空间与调用次数有关,调用次数越多则占有的存储空间越大。如果宏调用次数较多的话,则其空间上的开销也是应该考虑的因素 汇编程序给人感觉最烦的就是好多程序的结果不能直接通过运行EXE文件显示出来,而更多的是经过DEBUG单步调试才能看到其内在变化,看是否正确。在初次接触汇编的几个汇编工具时,有一种神奇的感觉,因为汇编程序不像其他的高级语言一样需要编译器,而是直接的就能在记事本上编写,然后进行汇编和

实验二8086汇编语言之分支、循环程序设计

实验二8086汇编语言之分支、循环程序设计 【实验目的】 1.掌握循环结构程序设计的方法; 2.掌握数据块传送程序设计的方法; 3.掌握串传送指令的应用。 【实验内容】 1.编写程序实现将数据段STR1单元开始的20个字符移到STR2开始的存储区。假设STRI+20>STR2,可以用串传送指令,也可以用MOV传送指令。 该题目要求掌握单循环程序设计方法。为了实现指定功能,应从以下几个方面考虑: (1)数据串操作的起始位置从高地址还是从低地址开始。 (2)确定使用串传送指令,还是用MOV指令。 (3)确定循环程序的结构。 2.如果要求字符串从键盘中输入,应如何设计程序? 3.用子程序方法,且不使用MOVSB指令来完成数据块的传输,应如何设计程序?【实验程序】 DATA SEGMENT STR1 DB 'WHAT IS YOUR NAME?',0AH,0DH,'$' CN EQU $-STR1 STR2 EQU STR1+ CN-5 DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV DX, OFFSET STR1 MOV AH,09H INT 21H MOV SI ,OFFSET STR1 MOV DI ,OFFSET STR2 MOV CX ,CN ADD SI ,CN-1 ADD DI, CN-1 STD REP MOVSB MOV AH,09H INT 21H MOV AH,4CH INT 21H CODE ENDS END START 【实验结果】 数据段STR1单元开始的20个字符成功移到STR2开始的存储区

汇编语言程序设计

《汇编语言程序设计》课程教学大纲 学时:32 学分:2 理论学时:24 实验学时:8 面向专业:电科、电信、通信课程代码:B2700009 先开课程:C语言程序设计课程性质:必修 执笔人:王艳春审定人:陈龙猛、张金政 第一部分:理论教学部分 一、说明 1、课程的性质、地位和任务 本课程属于专业基础课,是电科、电信和通信专业学生必修的核心课程之一,是进一步学习微机原理、操作系统等课程的基础。掌握它有助于提高学生对计算机系统的设计、研究、开发和应用能力。汇编语言是一种面向机器、实践性很强的程序设计语言,必须结合一种实际的计算机来组织教学。因此,本课程选择最广泛使用的IBM PC作为具体的机型来介绍。通过课堂教学和上机实践,培养学生用汇编语言进行编程的思路、方法,养成良好的程序设计习惯,并了解底层I/O 驱动软件的编程方法,熟悉源程序汇编、链接和调试运行的步骤和方法,掌握dos、BIOS功能的调用方法及使用debug工具的调试手段,为后续课的学习打下扎实的基础。 2、课程教学和教改基本要求 课程的目的与教学基本要求:本课程主要介绍汇编语言和宏汇编的基本概念,80X86CPU的指令系统和寻址方式;介绍汇编语言程序格式、伪操作和上机全过程。通过实际例子,详细叙述顺序、分支、循环、子程序等基本程序结构以及程序设计的基本方法和技巧。学习这门课程,应达到以下几个要求: ①掌握汇编语言的基本理论知识和有关概念;掌握用汇编语言编写源程序的基本原则、方法和技巧; ②具有阅读,分析汇编语言程序的能力; ③通过上机实践,能够熟练地掌握汇编语言程序的编辑、汇编、连接、运行 过程及debug工具的调试手段。

汇编语言分支结构程序设计

实验七分支结构程序设计 一、实验目的 掌握条件转移指令的使用方法及指令对标志寄存器中各标志位的影响;掌握标志位和转移指令之间的关系;会用条件转移指令和无条件转移指令设计多分支结构程序;掌握设置断点调试程序的方法。 二、示例 1、存自BUF单元开始的缓冲区连续存放着10个学生的英文分数,编程序统计其中90~100, 60~89,60以下者各有多少人?并把90-100分人数结果存放在P1单元中、60-89分人数结果存放在P2单元中,60分以下人数结果存放在P3单元中(P1、P2、P3为数据段的单元),最后把P1、P2、P3中的数以”P1=?、P2=?、P3=?”显示在屏幕上。(注:数据以10进制显示) DATA SEGMENT BUF DB 70H,58H,50H,91H,99H,62H,75H,82H,74H,60H ;定义BUF单元地址开始的缓冲区的数据 ORG 0020H ;程序执行时,将P1送到0200H存单元 P1 DB 0 ORG 0030H ;程序执行时,将P2送到0300H存单元 P2 DB 0 ORG 0040H P3 DB 0 ;程序执行时,将P3送到0400H存单元 ORG 0050H ;程序执行时,将DP1送到0500H存单元 DP1 DB'P1= $' ORG 0060H ;程序执行时,将DP2送到0600H存单元 DP2 DB'P2= $' ORG 0070H ;程序执行时,将DP3送到0700H存单元 DP3 DB'P3= $' ORG 0080H ;程序执行时,将COUNT送到0800H存单元 COUNT DW 10 ;'$'为地址运算符,返回当前程序语句的地址偏移值DATA ENDS;定义数据段 CSEG SEGMENT ASSUME CS:CSEG,DS:DATA PUSH DS ;将DS压入堆栈 SUB AX,AX;将AX存器容清空 PUSH AX START:MOV AX,DATA MOV DS,AX ;将数据传给数据段DS MOV CX,COUNT ;设置计数器CX,最多为10 MOV SI,0 ;给SI赋值为0 LP1: MOV AL,BUF[SI] ;将BUF存单元的第si个容赋值给AL

相关主题
文本预览
相关文档 最新文档