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

第四章 汇编语言程序设计基础

第四章 汇编语言程序设计基础
第四章 汇编语言程序设计基础

第四章汇编语言程序设计基础

4.1单片机指令速记:英文还原法

汇编指令是采用助记符的形式构成的指令系统,很多指令的均是对应功能的英文单词的缩写,下面还原了一些指令的英文单词来源,便于加深对于指令的记忆和功能的理解。

DEC(Decrement):减1

INC( Increment):加1

ADD:加

SUBB(Subtract):减

DIV(Divide):除

MUL(Multiply):乘

CLR(Clear):清零

ANL(And Logic):逻辑与

RL(Recursion Left)循环左移

RR(Recursion Right)循环右移

XCH(Exchange):字节交换

SWAP:高低四位互换

JMP(Jump):跳

LJMP(Long Jump):长跳转

SJMP(Short Jump):短跳转

AJMP(Absolute Jump):绝对跳转

CALL: 调用

ACALL(absolute call):绝对调用

LCALL(long call):长调用

JZ(Jump Zero):累加器A为0跳转

JNZ(Jump Not Zero):累加器A不为0跳转

CJNE(Compare Jump Not Equal):比较不相等跳转

DJNZ(Dec Jump Not Zero):减1不为0跳转

4.2 MCS-51单片机汇编指令速查表

4.3单片机的寻址方式

1、立即寻址

操作数以立即数的形式出现在指令中,操作数前要加“#”

MOV A ,#3AH

MOV DPTR ,#0DFFFH

2、直接寻址

指令中的操作数地址直接给出,可以寻址的空间有三种:

(1)内部数据存储器的低128个字节单元(00H~7FH)

(2)特殊功能寄存器(只能用直接寻址方式访问)

(3)位地址空间

MOV A ,30H ;

MOV IE,#82H ;

SETB 07H

3、寄存器寻址

操作数存放在寄存器中;寄存器包括:R0~R7、A、B、DPTR、C

INC R1

MOV A,R0

4、寄存器间接寻址

寄存器中的内容是操作数的地址。间址寄存器只能是R0、R1、DPTR;访问内部RAM 时,用R0、R1;访问外部RAM时,三个都可以使用;在使用时,间址寄存器前要加@。

MOV A,@R0

MOVX A, @DPTR

5、基址寄存器加变址寄存器寻址

操作数的地址是两种寄存器内容的和;这种寻址方式用于访问程序存储器中的数据表格。

基址寄存器:PC、DPTR

变址寄存器:A

MOVC A,@DPTR+A

MOVC A, @PC+A

JMP @A+DPTR

6、相对寻址

在相对转移指令中,以PC中的内容为基本地址,加上指令中给出的偏移量,作为操作数的转移地址。

JZ LOOP ;

DJNZ START

7、位寻址

操作数在内部RAM中的某一位中,位寻址时必须用位指令。

MOV bit , C

CLR C ;

CLR 00H

4.4 指令系统

单片机的指令系统包括数据传送指令,算术运算指令,逻辑运算指令,位操作指令,控制转移指令

4.4.1数据传送类指令

数据传送类指令共有29条,8个助记符:MOV、MOVX、MOVC、XCH、XCHD、PUSH、POP、SW AP;源操作数可以是立即、寄存器、直接、寄存器间接、基址加变址5种寻址方式;目的

操作数可以用寄存器、寄存器间接、直接3种寻址方式。除了堆栈操作可以影响标志位外,其他的指令都不能改变标志位。指令执行后源操作数不变,目的操作数修改为源操作数。

1、数据传送到累加器A的指令

MOV A,R0

MOV A,direct

MOV A,@Ri

MOV A,#data

2、数据传送到工作寄存器Rn的指令

MOV Rn ,A

MOV Rn ,direct

MOV Rn ,#data

3、数据传送到内部RAM或SFR 的指令

MOV direct ,A

MOV direct ,Rn

MOV direct ,direct

MOV direct ,@Ri

MOV direct ,#data

MOV @Ri ,A

MOV @Ri ,#data

MOV DPTR ,#data

片内RAM数据传送指令实例

补例分析下列程序运行后R0,R1,40H,41H单元中为何值?

MOV 30H,#40H

MOV 41H,#11H

MOV A,30H

MOV R1,A

MOV A,#00H

MOV @R1,A

MOV R0,41H

MOV 50H,#22H

MOV 41H,50H

答案(R0)=11H, (R1)=40H

(40)=00H ,(41H)=22H

4.累加器A与外部数据存储器的传送指令

MOVX A,@DPTR

MOVX A,@RI

MOVX @DPTR,A

MOVX @RI,A

注:片外8位地址使用R i,16位地址采用DPTR;必须通过累加器进行数据传输;只能用寄存器间接寻址方式。

片外RAM数据传递举例(1)

例4-1 有一输入设备,其端口地址位2040H,该端口数据为41H,将其存入到片内RAM的20H单元。

MOV DPTR,#2040H

MOVX A,@DPTR

MOV 20H,A

例4-2 有一输出设备,其端口地址为2041H,将片内RAM的20H单元的数据传送至该输出设备MOV DPTR,#2041H

MOV A,20H

MOVX @DPTR,A

片外RAM数据传递举例(2)

例4-3 将片外RAM的2000H单元的数61H取出,送至片外RAM的3FFFH断源中。

MOV DPTR,#2000H

MOVX A,@DPTR

MOV DPTR,#3FFFH

MOVX @DPTR,A

5、累加器A与程序存储器之间的传送指令

①MOVC A,@A+PC A←((A)+(PC+1))

②MOVC A,@A+DPTR A←((A)+(DPTR))

说明:这两条指令用于查找存放在程序存储器中的常数表格。

第①条指令是以PC为基地址寄存器,A中的内容是无符号数,二者之和作为物理地址进行寻址。在实际应用时,通常要计算偏移量(即A中的值),计算方法如下:

偏移量=表首地址-(PC+1)

注意:由于A的值为无符号数,而且PC的值不能人为的改变,所以表格只能放在当前指令的下面。第②条指令是以DPTR作为基地址寄存器,由于DPTR的值可以改变,所以用这种指令指令时,表格可以随便放。但有一点要注意的是由于DPTR使用的频率比较高,所以每次使用前最好入栈保护

ROM数据传送举例1

例4-4从LED代码表中查询3的代码送至片外RAM的1200H单元。

源程序MOV A,#0AH

MOVC A,@A+PC

MOV DPTR,#1200H ;3字节

MOVX @DPTR,A;1字节

NOP ;1字节

NOP ;1字节

RET ;1字节

TAB: DB 0C0H

DB 0F9H

DB 0A4H

DB 0B0H ;”3”代码

DB 99H

ROM数据传送举例2

例4-54000HROM单元的内容送到片内RAM60H单元

MOV DPTR,#4000H

MOV A,#00H

MOVC A,@A+DPTR

MOV 60H,A

例4-64000H的ROM单元内容传送到片外RAM的60H单元

MOV DPTR,#4000H

MOV A,#00H

MOVC A,@A+DPTR

MOV R0,#60H

MOVX @R0,A

6.字节交换指令

XCH A,Rn

XCH A,@Ri

XCH A,direct

XCHD A,@Ri

SWAP A

例4-7A=3FH,R0=20H,(20H)=46H,执行指令:XCH A,@R0

结果:A=46H,(20H)=3FH

若执行的指令是XCHD A,@R0,则结果为:A=36H,(20H)=4FH

例4-8已知外部RAM的20H单元的内容为38H,内部RAM的20H单元的内容为08H,将这两个单元的内容互换。

MOV R0,#20H

MOVX A,@R0

XCH A,@R1

MOVX @R1,A

7.堆栈操作指令

PUSH direct

POP direct

入栈操作:先将SP+1,然后将直接给出的地址的内容送入SP所指定的RAM单元;

出栈操作:先将SP所指定的RAM单元中的内容弹出到直接给出的地址中去;

例:进入中断服务程序时,把PSW、A、DPTR进行入栈保护。

设当前栈底为(SP)=60H

PUSH PSW ;(SP)=61H

PUSH ACC ;(SP)=62H

PUSH DPL ;(SP)=63H

PUSH DPH ;(SP)=64H

出栈时,操作如下:POP DPH

POP DPL

POP ACC

POP PSW

例4-9设堆栈栈顶为30H,将A,DPTR的内容压入堆栈,已知A=12H,DPTR=3456H.

MOV SP,#30H

PUSH ACC

PUSH DPL

PUSH DPH

执行完指令后,SP=33H,片内RAM的内容:

(31H)=12H,(32H)=56H,(33H)=34H

在上面基础上继续执行指令

POP DPH

POP DPL

POP ACC

执行完后SP=30H,A=12H,DPTR=3456H

4.4.2 算术运算类指令

MCS-51 指令系统具有较强的加、减、乘、除四则运算指令,但只有8 位数据运算指令,没有16 位数据运算指令。八种指令助记符:ADD,ADDC,SUBB,INC,DEC,DA,MUL,DIV.

1. 加法类指令

(1)加法指令

ADD A ,R n ;(A )←(A )+ (R n )

ADD A,direct ;(A)←(A)+(direct)

ADD A,@Ri ;(A)←(A)+((Ri))

ADD A,#data ;(A)←(A)+#data

上述指令的功能是将累加器A 中的内容与源操作数相加,结果存于A 中。当相加结果的第3位和第7位有进位时,分别将AC和CY 置1,否则清0。

无符号数相加后,若CY=1,表示溢出;CY=0,表示无溢出。

对于带符号数相加结果的溢出,取决于第7位和第6位。若第7 位有进位而第6位没进位,或第7位没进位而第6位有进位,则OV=1;若第7位和第6位都有进位,或都没进位,则OV=0。

OV=1 表示两个正数相加而和变为负数,或两个负数相加而和变为正数的错误结果。

(2)带进位加法指令

ADDC A ,R n

ADDC A,direct

ADDC A,@Ri

ADDC A,#data

累加器A 中的内容与源操作数及进位标志位CY相加,结果送A中,此类指令多用于多字节加法运算中。

(3)加1指令

INC A

INC Rn

INC direct

INC @Ri

INC DPTR

操作数制定的单元或寄存器加1.

(4 )二- 十进制调整指令

DA A

这是一条专用指令,用于对BCD 码十进制加法运算的结果进行修正。MCS-51 指令系列系统中没有十进制(BCD )的加法指令,只能借助于二进制加法指令。然而,二进制数的加法用于十进制加法运算时,有时会产生错误结果。例如:

1) 6+3=9 2) 8+7=15 3) 8+9=17

0110 1000 1000

+ ) 0011 + ) 0111 + ) 1001

1001 1111 1 0001

其中:1)的运算是正确的,因为9 的BCD码就是1001 ;

2 )的运算结果是不正确的,因为BCD 码没有1111 ;

3 )的运算结果也是错误的,因为运算结果是11 ,而不是17 。

出错的原因在于,BCD码是4 位的二进制编码,而4位二进制编码共有16个编码,但BCD码只用了其中的10 个,剩下的6个没有用。通常把这6 个没有用的编码(1010,1011 ,1100,1101 ,1110 ,1111)称为无效码。

在BCD 码的加法运算中,凡是结果已进入或跳过无效编码区时,其结果都是错误的。相加的结果大于9 ,说明已进入无效编码区;相加的结果有进位,说明已跳过无效编码区。但不管是哪一种出错情况,相加结果都比正确值小6 。出错是由6 个无效编码造成的。

为此,对BCD码运算结果进行“加6”调整,才能得到正确的结果。“加6”的条件是:

1 )(A )3 ~0 > 9 或(A C )= 1 ;

2 )(A )7 ~4 > 9 或(C Y )= 1 。

十进制调整指令不影响溢出标志。

例4-10设一个加数存于40H 和41H 单元,另一个加数存于42H 和43H 单元,和存于40H

和41H 单元。4 位BCD 码的加法程序如下(假定相加的结果仍为4 位BCD 码):

MOV R0,#40H ;R0 指向加数低字节

MOV A,42H

ADD A,@R0

DA A

MOV 40H,A

INC R0

MOV A,43H

ADDC A,@R0

DA A

2. 减法类指令

(1)带进位减法指令

SUBB A,Rn

SUBB A,direct

SUBB A,@Ri

SUBB A,# data

功能:将累加器A的内容与第二操作数及进位标志相减,结果送到累加器A中。

(2)减1指令

DEC A

DEC Rn

DEC direcr

DEC @Ri

若A=00H,减一后变为FFH,同时CY=1

3.乘除类指令

(1)乘法指令

MUL AB

功能:完成单字节的乘法,将A中的内容与寄存器B中的内容相乘,乘积的低8位放在A中,高8位放在 B中。乘积的结果超过0FFH时影响OV,但不影响Cy。

(2)除法指令

DIV AB

将A 中的8 位无符号数除以B 中的8 位无符号数,商存于A,余数存于B。CY和OV均清零,若(B)=0(即非法)时(OV)=1,表明除法没有意义,而其他情况下(OV)=0;P 标志仍取决于A 的内容。

4.4.3 逻辑运算及移位类指令

MCS-51 指令系统能对位和字节操作数进行基本的逻辑运算。下面介绍字节操作数的逻辑运算,有关位操作将在后面介绍。该类共有九种操作符:CLR、CPL、ANL、ORL、XRL、RL、RLC、RR、RRC。

1.双操作数逻辑运算指令

(1)逻辑“与”运算指令

ANL A ,R n ;( A )←( A )∧(R n )

ANL A,direct ;(A)←(A)∧(direct)

ANL A,@Ri ;(A)←(A)∧((Ri))

ANL A,#data ;(A)←(A)∧ #data

ANL direct,A ;(direct)←(direct)∧(A)

ANL direct,#data ;(direct)←(direct)∧ #data

例4-11 已知(A)=1010 1101B,(R4)=0110 0101B。执行指令ANL A,R4 的过程为(A) =1010 1101

∧)(R4)=0110 0101

(A)=0010 0101

(2)逻辑“或”运算指令

ORL A ,R n ;( A )←( A )∨(R n )

ORL A,direct ;(A)←(A)∨(direct)

ORL A,@Ri ;(A)←(A)∨((Ri))

ORL A,#data ;(A)←(A)∨ #data

ORL direct,A ;(direct)←(direct)∨(A)

ORL direct,#data ;(direct)←(direct)∨ #data

例4-12 将累加器A 的高5 位送到P1口的高5位,而P1口的低3位保持不变。程序如下:

MOV R 2 ,A ;暂存A的内容

ANL A,#0F8H ;取A的高5 位

ANL P1,#07H ;取P1的低3 位

ORL P 1 ,A ;组合P1口内容

MOV A ,R 2 ;恢复A的内容

(3)逻辑“异或”指令

“异或”操作也是按位进行的。当两个操作数相同时,结果为0 ;不同时,结果为1 。

运算符号为⊕。

XRL A ,R n ;( A )←( A )⊕(R n )

XRL A,direct ;(A)←(A)⊕(direct)

XRL A,@Ri ;(A)←(A)⊕((Ri))

XRL A,#data ;(A)←(A)⊕ #data

XRL direct,A ;(direct)←(direct)⊕(A)

XRL direct,#data ;(direct)←(direct)⊕ #data

例4-13 将累加器A的高4位不变,低4位取反。

XRL A,#0FH

2.单操作数逻辑运算指令

(1)累加器A清零指令

CLR A

(2)累加器A取反指令

CPL A

(3)累加器A循环移位指令

RL A ;自身循环左移移位指令

RR A ;自身循环右移移位指令

RLC A ;带进位位的循环左移指令

RRC A ;带进位位的循环右移指令

循环移位指令工作示意图如图4-1所示。

图4-1 循环移位指令示意图

4.4.3 控制转移类指令

控制转移类指令共有17条,该类指令作用在程序存储器空间。利用具有16位地址的长调用、长转移指令可寻遍程序存器空间的任一单元;利用具有11位地址的绝对调用、绝对转移可在2KB的程序块中转移。指令助记符有10种:AJMP、LJMP、SJMP、JMP、ACALL、LCALL、JZ、JNZ、CJNE、DJNZ。可分为无条件转移指令、条件转移指令、程序调用及返回指令,一般的控制转移指令不影响标志位。

该类指令通过强迫改变PC值的方法来实现。这就是控制转移类指令的基本功能。

1. 无条件转移指令

(1)长转移指令

LJMP addr16 ;(P C )← a d d r 1 6

这是一条3字节指令,指令执行后把16 位地址(addr16)送入PC,从而实现了程序的转移。

因为转移范围大,可达64KB,故称为“长转移”。

(2)绝对转移指令

AJMP addr11 ;(P C )←(P C )+ 2 ,(P C )1 0 ~0 ← a d d r 1 1

AJMP 指令提供11 位地址去替换PC 的低11位地址内容,形成新的PC值,即转移目的地址。

AJMP 是一条双字节指令,指令的格式为

第一字节 A10 A9 A8 0 0 0 0 1

第二字节 A7 A6 A5 A4 A3 A2 A1 A0

指令提供的11 位地址中,A7~A0 在第二字节,A10~A8 则占据第一字节的高3位,而指令操作码只占第一字节的低5位(00001)。AJMP指令的功能是构造程序转移目的地址,实现程序的转移。其构造新地址的方法是:以指令提供的11 位地址(A10~A0)去替换PC 的低11 位形成新的PC 值,即转移目的地址。但要注意,被替换的PC 值是AJMP指令的地址加2的PC值,即指向AJMP下条指令的PC 值,称为PC 当前值。例如,在程序存储器的2070H 单元存放一条绝对转移指令:

2070H AJMP NEWAD

标号地址NEWAD 的低11位地址为16AH=001 0110 1010B,构成的指令代码为216AH,即

0 0 1 0 0 0 0 1

0 1 1 0 1 0 1 0

程序计数器PC加2 的内容为:0010 0000 0111 0010B=2072H,以11位绝对地址(16AH)

代替PC 中的低11 位,形成的转移目的地址为:0010 0001 0110 1010B=216AH。

addr11 是无符号整数,最小值为000H,最大值为7FFH,因此绝对转移指令所能转移的最大范

围是2KB。对于“2070H AJMP NEWAD”指令,其转移范围是2000H~27FFH。

(3)短转移指令

SJMP rel

SJMP 是相对寻址方式的双字节指令,其中rel 为相对偏移量。指令的功能是按计算得到转移目的地址,实现程序转移。计算公式为:

目的地址=(PC)+2+rel

其中,PC 称为源地址,即指令“SJMP rel”所在程序单元的地址;偏移量rel 是一个带符号的8 位二进制补码数。如果rel为正,则向前转移;如果rel为负,则向后转移。计算偏移量的公式为: rel= 目的地址-(源地址+2)

若相对转移指令是3 字节指令,则偏移量为:

rel= 目的地址- (源地址+3 )

(4)变址寻址转移指令

JMP @A+DPTR ;(P C )←(A)+ (D P T R)

以DPTR 内容为基础(称为基址),A 中的内容作为变址。当DPTR 固定时,A 中赋值不同,可以实现程序的对分支转移。其计算公式为

转移目的地址= (A )+ (D P T R )

这种由基址寄存器(DPTR)和变址寄存器(A)共同实现的间址方式,称为变址寻址。

2. 条件转移指令

执行条件转移指令时,如指令中规定的条件满足,则进行程序转移;否则,程序顺利执行。

(1)累加器判零转移指令

JZ rel

若(A)= 0 ,则(PC)←(PC)+ 2 + rel ,即转移;否则(PC)←(PC)+ 2 ,即顺序执行JNZ rel

若(A)≠ 0 ,则(PC)←(PC)+ 2 + rel ,即转移;否则(PC)←(PC)+ 2 ,即顺序执行上述两条指令均为双字节指令。第一条指令转移条件是(A)= 0 ,第二条指令转移条件是(A)≠ 0 ,A 中的内容为转移指令前面最后一条指令的执行结果。单片机的程序状态字P S W 中没有零标志,只能用累加器的内容为零(非零)作为判断条件。

(2)比较条件转移指令

比较条件转移指令是把两个操作数进行比较,以是否相等作为条件来控制程序转移。共有4条指令:CJNE A,#data,rel ;累加器内容与立即数不等则转移,否则顺序执行

CJNE A,direct,rel ;累加器内容与内RAM 中指定单元内容不等则转移,否则顺序执行

CJNE Rn,#data,rel ;工作寄存器内容与立即数不等则转移,否则顺序执行

CJNE @Ri,#data,rel ;内部RAM 中指定单元(间址形式)内容与立即数不等则转移,否则顺序执行

上述4 条指令是3 字节指令,具有数值比较和程序转移两方面功能。

两个操作数比较结果影响CY 标志,但不影响操作数中的内容。当左操作数= 右操作数时,

(CY)=0,程序顺序执行;

当左操作数>右操作数时,(CY)=0,程序转移执行;

当左操作数<右操作数时,(CY)=1,程序转移执行。

(3)减1条件转移指令

这是一组把减1 与条件转移两种功能结合在一起的指令,共有两条。

● 寄存器减1条件转移指令(双字节指令)为

DJNZ R n ,r e l ;(R n )←(R n )- 1

若(Rn)≠ 0,则(PC)←(PC)+ 2 + r e l ,即程序转移;

若(Rn)= 0,则(PC)←(PC)+ 2 ,即程序顺序执行。

● 直接寻址单元减1 条件转移指令(3 字节指令)为

DJNZ d i r e c t,r e l;(d i r e c t )←(d i r e c t)- 1

若(direct)≠ 0,则(PC)←(PC)+ 3 + rel,即程序转移;

若(direct)= 0,则(PC)←(PC)+ 3 ,即程序执行。

这两条指令主要用于控制程序循环。如预先把寄存器或内部RAM 单元赋值循环次数,利用减1条件转移指令,以减1后是否为0作为转移条件,即可实现按次数控制循环。

例4-14:将外部RAM 地址为1100H~11FFH 的256个单元清0,试编制实现程序。

MOV R7,#00H ;置计数初值

MOV A, #00H

MOV DPTR,#1100H ;清0 单元首地址

LOOP:MOVX @DPTR,A ;清0

INC DPTR

DJNZ R7,LOOP ;计数值减1,不为0 则循环

RET ;返回

3.子程序调用及返回指令

从主程序转向子程序的指令称为子程序调用指令;从子程序返回主程序的指令称为返回指令。调用指令与转移指令的主要区别是转移指令不保存返回地址,而子程序调用指令在转向目的地址的同时,必须保留返回地址(称为断点地址),以便执行返回指令时回到主程序断点的位置。通常采用堆栈技术保存断点地址,这样可以允许多重子程序调用(在子程序中再次调用子程序)。

(1)绝对调用指令(双字节指令)

ACALL addr11 ;(PC)←(PC)+ 2 ,(SP)←(SP)+ 1 ,(SP)←(PC)7 ~0

;(SP)←(SP)+ 1 ,(SP)←(PC)1 5 ~8

;(PC)1 0 ~0 ← a d d r 1 1 ,(PC)1 5 ~1 1 保留

该指令格式为

指令代码中提供了子程序入口地址的低11位。这11位地址的A7~A0占据指令的第二字节,A10~A8 占据指令的第一字节的高3位,低5位为操作码。指令的调用范围为2KB。为了实现直程序调用,该指令共完成两项操作:

●断点保护:断点保护是通过自动方式的堆栈操作实现的。即把加2 以后的PC 值(称为PC

当前值)自动送入栈区保存起来,待子程序返回时再送回PC。

●构造目的地址:目的地址的构造是在PC加2的基础上,以提供的11位地址取代PC当前值中的低11位,PC的高5 位保持不变。

(2)长调用指令(3字节指令)

ACALL addr16 ;(PC)←(PC)+ 3 ,(SP)←(SP)+ 1 ,(SP)←(PC)7 ~0

;(SP)←(S P )+ 1 ,(SP)←(P C )1 5 ~8

;(PC)← a d d r 1 6

子程序入口地址在指令中直接给出.指令执行后,断点进栈保存,addr16 作为子程序入口地址。本指令的调用范围是64KB(0000H~FFFH),使用比较方便,但3字节指令较ACALL指令占有较多的存储空间.

(3)返回指令

● 子程序返回指令

RET

;(PC)1 5 ~8 ←(SP),(SP)←(SP)- 1 ,(PC)7 ~0 ←(SP),(SP)←(SP)- 1 ● 中断返回指令为

RETI

;(PC)1 5 ~8 ←(SP),(SP)←(SP)- 1 ,(PC)7 ~0 ←(SP),(SP)←(SP)- 1 子程序返回和中断返回指令的功能都是从堆栈中取出16 位断点地址送PC,使子程序返回主程序。RET 指令安排在子程序出口处,RETI指令安排在中断服务程序出口处。

此外,RETI 指令还具有清除中断响应时被触发的优先级状态、开放较低级中断和恢复中断逻辑等功能。

例4-15 已知(SP )= 62 H ,(62H)= 07H ,(61H )=30H ,执行RET 指令后,其结果是:(SP)= 60 H ,(PC)= 0730 H ,即CPU 从0730 H 处开始执行程序。

(4)空操作指令

NOP ;(P C )←(P C )+ 1

空操作指令也是一条控制指令,控制CPU 不做任何操作,只消耗一个机器周期的时间。空操作指令是单字节指令,依次执行后PC加1,时间延续一个机器周期。NOP指令常用于程序的等待或时间的延迟。

4.4.4 位操作类指令

位操作就是以位(bit)为单位进行的运算和操作。位变量也称为布尔变量或开关变量。MCS-51 指令系统适用位操作的地址空间是片内RAM 20H~2FH 单元(位地址为00H~7FH)以及SFR 区中可寻址的位。

1.位传送指令

MOV C ,bit ;(CY)←(bit)

MOV bit,C ;(bit)←(CY)

bit 表示位地址。位传送就是可寻址的位与CY之间的相互传送。由于没有可寻址位之间的直接传送指令,因此位之间无法实现直接传送。如果需要位之间传送,必须以C Y 作中介实现。

例4-16:将位地址为20H 的内容传送到位地址5AH。编制程序如下:

MOV 10H,C ;暂存CY 内容

MOV C,20H ;20H 位送CY

MOV 5AH,C ;CY 送5AH 位

MOV C,10H ;恢复CY 内容

2.位置位和复位指令

SETB C ;(C Y )← 1

SETB bit ;(bit)← 1

CLR C ;(CY)← 0

CLR bit ;(bit)← 0

3.位运算指令

位运算都是逻辑运算,有“与”、“或”、“非” 3 种,共6 条指令

ANL C,bit ;(CY)←(CY)∧(bit)

ANL C,/bit ;(CY)←(CY)∧(bit)

ORL C,bit ;(CY)←(CY)∨(bit)

ORL C,/bit ;(CY)←(CY)∨(bit)

CPL C ;(CY)←(CY)

CPL bit ;(CY)←(bit)

“/ b i t ”表示位中内容的“非”,运算后b i t 中的内容不取反,保持原内容不变。在位操作指令中,没有位的“异或”运算,需要时可由上述多条位操作指令实现。此外,通过位逻辑运算,可对各种组合逻辑电路进行模拟,即用软件方法来获得组合电路的逻辑功能。

4.位控制转移指令

位控制转移指令就是以位的状态作为实现程序转移的判断条件。

(1)以C状态为条件的转移指令(双字节指令)

JC rel ;若(C Y )= 1 ,则(P C )←(P C )+ 2 + r e l ,即转移

;若(C Y )= 0 ,则(P C )←(P C )+ 2 ,即程序顺序执行JNC rel ;若(C Y )= 0 ,则(P C )←(P C )+ 2 + r e l ,即转移

;若(CY)=1,则(PC)←(PC)+2,即程序顺序执行

(2 )以bit状态为条件的转移指令(3 字节指令)

JB bit,rel ;若(b i t )= 1 ,则(P C )←(P C )+ 3 + r e l ,即转移

;若(bit)=0,则(PC)←(PC)+3,即程序顺序执行

JNB bit,rel ;若(bit)=0,则(PC)←(PC)+3+rel,即转移

;若(bit)=1,则(PC)←(PC)+3,即程序顺序执行

JBC bit,rel ;若(bit)=1,则(PC)←(PC)+3+rel,即转移,且同时清bit位

;若(bit)=0,则(PC)←(PC)+3,即程序顺序执行

JBC 指令中,若可寻位为1 时,则转移,并同时清该位。当bit 是P0~P3 端口中某一位时,该指令称为:“读- 修改- 写”指令。

4.5 汇编语言程序设计

用助记符表示的指令就是计算机的汇编语言,每一条指令就是汇编语言的一条语句。

所谓程序设计就是编写计算机程序。汇编语言程序设计就是使用汇编指令来编写计算机程序。4.5.1 汇编语言的特点及其语句格式

1.汇编语言的特点

汇编语言有以下特点

1)助记符指令与机器指令一一对应,所以用汇编语言编写的程序占用存储器空间小,运行速度快,可编写出最优化程序。

2)汇编语言是面向计算机的。汇编语言的程序设计人员必须对计算机硬件有相当深入的了解。

3)汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能直接管理

和控制硬件设备。

4)各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用,因此汇编语言缺

乏通用性,程序不易移植。

2.汇编语言的语句格式

各种计算机汇编语言的语句格式及语法规则基本相同。MCS-51 汇编语言的语句格式为

[标号]:[操作码][目的操作数],[源操作数];[注释]

其中每部分也称为字段。各部分之间用一个空格或字段分界符分隔。常用的字段分界符有冒号“:”、逗号“,”和分号“;”。

(1)标号

标号用来说明指令的地址,用于其他语句对该句的访问。标号有以下规定:

1)标号由1~8 个字母和数符组成,字母打头,冒号“:”结束,中间允许数字符号。

标号中的字符个数不超过8 个,若超过8 个,则以前面的8 个字符有效,后面的字符不起作用。

2)不能用本汇编语言已经定义的符号作为标号,如指令助记符、伪指令以及寄存器的符号名称符。3)同一标号在一个程序中只能定义一次,不能重复定义。

4)一条语句可以有标号,也可以没有标号,取决于本程序中有无语句访问这条语句。

( 2 )操作码

操作码是汇编语句格式中惟一不能空缺的部分,用于规定语句执行的操作内容。

( 3 )操作数

操作数用于表明指令操作的数据或数据存储地址。操作数可以是空白,也可以是一项、两项,各操作数之间用逗号分开。MCS - 51指令系统的操作数有寄存器、立即数、直接、间接等7种寻址方式。操作数与操作码之间用空格分开。

( 4 )注释

释不属于语句的功能部分,只是对语句的解释说明,只要用“;”号开头,即表明以下为注释的内容。使用注释可使程序文件编制显得更加清楚,帮助程序人员阅读程序。注释可有可无,长度不限,一行不够时可以换行接着写,但换行时要注意在开头使用“;”号。

( 5 )分界符

分界符(分隔符)用于把语句格式中的各部分隔开,以便区分,包括空格、冒号、分号或逗号等多种符号。

冒号(:)——用于标号之后。

空格()——用于操作码和操作数之间。

分号(;)——用于注释之前。

逗号(,)——用于操作数之间。

3 . 汇编语言程序设计的特点

汇编语言程序设计有以下特点:

1)在程序中要对存取数据的存储器单元地址以及寄存器等作出明确分配。

2)设计人员对单片机应用系统的硬件结构要有详细了解,以便在程序中熟练使用。

3)设计程序要尽量采用模块化结构,便于阅读和修改。

4)在满足工艺要求和便于阅读的基础上,尽量选用字节少,工作进行效率高的指令和结

构形式。

4.5.2 汇编语言程序的基本结构形式

一般把程序结构分为3 种形式:顺序结构、分支结构和循环结构。

1.顺序结构

顺序结构是最简单的程序结构,在顺序程序中无分支、循环和调用子程序,程序是逐条顺序执行的。

例4-16 被加数存于片内RAM 32H,31H 和30H;加数存于片内RAM 35H,34H 和33H;相加之和存于片内RAM 32H,31H 和30H;进位存于40H 单元,试编制程序。

START: MOV R0,#30H ;被加数低字节地址

MOV R1,#33H ;加数低字节地址

MOV A ,@ R0

ADD A,@R1 ;低字节相加

MOV @R0,A ;存低字节相加结果

INC R0

INC R1

MOV A,@R0

ADDC A,@R1 ;中间字节相加

MOV @R0,A ;存中间字节相加结果

INC R0

INC R1

MOV A,@R0

ADDC A,@R1 ;高字节相加

MOV @R0,A ;存高字节相加结果

CLR A

ADDC A,#00H

MOV 40H,A ;存进位

RET

2.分支结构

分支结构是通过转移指令实现的。根据程序的功能特点,又可分为单分支程序、多分支程序等。例4-17假定在外RAM 2000H,2001H,2002H 的3 个连续单元中,2000H 和2001H 单元存放着两个无符号数,要求找出其中较大者并存于2002H单元。其程序如下:

ORG 0100H

START: CLR C

MOV DPTR,#2000H ;设置数据指针

MOVX A,@DPTR ;取第一个数

MOV R2 ,A ;暂存于R 2

INC DPTR ;数据指针加1

MOVX A,@DPTR ;取第二个数

SUBB A ,R2 ;两数比较

JNC LOOP1 ;第二个数大则转LOOP1

XCH A ,R2 ;第一个数大则交换

LOOP0: INC DPTR

MOVX @DPTR,A ;存大数

RET

LOOP1: MOVX A,@DPTR

SJMP LOOP0

3.循环结构

循环是为了重复执行一个程序段。在汇编语言中可以通过条件判断循环是否结束。

例4-18将内部RAM 20H为起始地址的数据串(最大长度为32 字节)传送到外部RAM2000H 为首地址的区域,直到发现“$”字符的ASCⅡ码为止。其程序如下:

MOV R0,#20H ;内RAM 数据串首地址

MOV DPTR,#2000H ;外RAM 数据串首地址

MOV R7,#20H ;最大数据串长度

LOOP0: MOV A,R0

XRL A,#24H ;判断是否为“$”字符

JZ LOOP1

MOV A,@R0

MOVX @DPTR,A

INC R0

INC DPTR

DJNZ R7,LOOP0

LOOP1: RET

4.5.3 汇编语言的伪指令

用指令系统编写的汇编语言程序称为源程序,必须将其翻译成机器码(称为目标程序),单片机方可执行。源程序转换成目标程序的过程是由通用计算机执行一种特定的翻译程序(称为汇编程序)自动完成的。这个翻译过程称为汇编。

源程序中应有向汇编程序发出指示信息,告诉汇编程序如何完成汇编工作的控制命令,称之为伪指令。伪指令具有控制汇编程序的输入/ 输出、定义数据和符号、条件汇编和分配存储空间等功能。不同的汇编语言的伪指令也有所不同,但一些基本的东西却是相同的。

伪指令是由程序员发给汇编程序的命令,也称为汇编命令或汇编程序控制指令。只有在汇编前的源程序中才有伪指令,汇编后得到的目标程序(机器码)中没有伪指令相应的机器代码。

下面介绍MCS-51 汇编语言程序中常见的伪指令。

1. ORG 汇编起始地址命令

在汇编语言源程序的开始,通常都要用一条ORG (Origin)伪指令规定程序的起始地址。

命令格式为

[标号]:ORG [地址]

其中:[标号]是选择项,根据需要选用;[地址]项通常为16 绝对地址,但也可以使用标号或表达式。例如:

ORG 8000H

START: MOV A,#00H

??

即规定标号START代表地址8000H,目标程序的第一条指令从8000H开始。

2.END 汇编终止命令

END(END of assembly)是汇编语言源程序的结束标志,在整个源程序中只能有一条END 命令,且位于程序的最后。如果END命令出现在中间,则其后面的源程序汇编时将不予处理。

命令格式为

END

3.EQU 赋值命令

EQU(Equate)命令用于给标号赋值。赋值以后,其符号值在整个程序中有效。命令格式为[字符名称] EQU [赋值项]

其中,[赋值项]可以是常数、地址、标号或表达式。其值为8 位或16 位二进制数。赋值以后的字符名称既可以作立即数使用,也可以作地址使用。

4.DB 定义字节命令

DB(Define Byte)命令用于从指定的地址开始,在程序存储器的连续单元中定义字节数据。命令格式为

[标号]:DB [8 位数据表]

字节数据可以是一字节常数或字符,或用逗号分开的字符串,或用引号括起来的字符串。

例如:

DB“How are you?”

把字符串中的字符按ASCⅡ码存于连续的ROM 单元中。

常使用本命令存放数据表格,例如存放数码管显示的十六进制数的形码,可使用多条DB 命令定义:DB 3FH,06H,5BH,4FH

DB 66H,6DH,7DH,07H

DB 7FH,6FH,77H,7CH

DB 0C0H,0F9H,0A4H,0B0H

5.DW 定义字命令

DW(Define Word)命令用于从指定地址开始,在程序存储器的连续单元中定义16 位的数据字。命令格式为

[标号]:DW [16 位数据表]

存放时,数据的高8 位在前(低地址),低8 位在后(高地址)。例如:

DW “AA”;存入41H,41H

DW “A”;存入00H,41H

DW “ABC”;不合法,因超过两个字节

DW 100H,1ACH ;按顺序存入01H,00H,01H,ACH

DB 和DW 定义的数据表,数的个数不得超过80 个。如果数据的数目较多时,可使用多个定义命令。在MCS-51 程序设计中,常以DB定义数据,以DW是定义地址。

6.DS 定义存储区命令

DS(Define Storage)命令用于从指定地址开始,保留指定数目的字节单元作为存储区,供程序运行使用。汇编时,这些单元不赋值。命令格式为

[标号]: DS [16 位数据表]

例如:

ADDTAL : DS 20

从标号ADDTBL 带表的地址开始,保留20个连续的地址单元。又例如:

ORG 8100H

DS 08H

从8100 H 地址开始,保留8 个连续的地址单元。

注意DB,DW 和DS 命令只能对程序存储器使用,而不能对数据存储器使用。

7.BIT 位定义命令

本命令用于给字符名称赋以位地址。命令格式为

[字符名称] BIT [位地址]

其中[位地址]可以是绝对地址,也可以是符号地址(即位符号名称)。例如:

AQ BIT P1.0

把P1.0 的位地址赋给变量AQ。在其后的编程中,AQ就可以作为位地址(P1.0)使用。

4.6 汇编语言程序设计举例

4.6.1 算术运算程序

1 . 加、减运算程序

(1)不带符号的多字节数加法

例4-19设有两个4 字节的二进制数,分别存放在以30H 和50H 为起始地址的单元中(先

存放低字节)。求这两个数的和,并将和存放在以3 0 H 为起始地址的单元中,试编制程序。

程序如下:

ORG 2000H

JAZ : MOV R0, #30H ;指向加数最低位

MOV R1, #50H ;另一加数最低位

汇编语言程序设计试题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. 中断源:

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

《汇编语言程序设计试题及答案》合集 汇编语言程序设计试题及答案 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

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

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

目录 第一章上机过程 (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.doczj.com/doc/f14987943.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.doczj.com/doc/f14987943.html,/so/so138.aspx?id=3997 https://www.doczj.com/doc/f14987943.html,快速开发新闻系统在线播放 https://www.doczj.com/doc/f14987943.html,/so/so138.aspx?id=4708 数字电路基础[宁波电大] https://www.doczj.com/doc/f14987943.html,/so/so138.aspx?id=774 计算机组成与汇编语言程序设计(赵丽梅)宁波电大 https://www.doczj.com/doc/f14987943.html,/so/so138.aspx?id=1242 操作系统(陈访荣)宁波电大(在线播放) https://www.doczj.com/doc/f14987943.html,/so/so138.aspx?id=4708 计算机网络(马敏飞)宁波电大 https://www.doczj.com/doc/f14987943.html,/so/so138.aspx?id=1243 https://www.doczj.com/doc/f14987943.html, 2.0快速入门(12)-https://www.doczj.com/doc/f14987943.html, 2.0网站快速导航 https://www.doczj.com/doc/f14987943.html,/so/so138.aspx?id=2501 Internet和Intranet应用(薛昭旺)宁波电大 https://www.doczj.com/doc/f14987943.html,/so/so138.aspx?id=1245 2004年电脑硬件安装调试维修视频教学讲授 https://www.doczj.com/doc/f14987943.html,/so/so138.aspx?id=4825 https://www.doczj.com/doc/f14987943.html, 高级排错技巧 https://www.doczj.com/doc/f14987943.html,/so/so138.aspx?id=768 SQL Server 2000管理专家系列课程 https://www.doczj.com/doc/f14987943.html,/so/so138.aspx?id=4832 开心三人行系列(2):使用Atlas 构建AJAX应用 https://www.doczj.com/doc/f14987943.html,/so/so138.aspx?id=2564 Visual Basic 2005开发技巧系列课程(4): 在Visual Basic 2005中使用.NET Framework 2.0新增功能 https://www.doczj.com/doc/f14987943.html,/so/so138.aspx?id=2526 SQL Server 2005 系列课程-使用ADO https://www.doczj.com/doc/f14987943.html,开发SQL Server 2005 OLAP应用 https://www.doczj.com/doc/f14987943.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

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

实验一基础汇编语言程序设计 实验目的 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)。

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)

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

汇编语言程序设计

汇编语言程序设计 实验报告 实验名称上机过程及顺序结构与分支结构程序设计实验班级 学号 姓名 日期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, 根据结果影响其他标志位。

新版汇编语言程序设计钱晓捷第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〕什么是汇编语言源程序、汇编程序、目标程序? 〔解答〕 用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编 译通过的程序就是目标程序。

汇编语言程序设计教程(第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.用软件转换

第四章MCS-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

汇编语言程序设计

实验四程序设计 一、实验目的 学习数据传送指令和算术运算指令的用法;掌握数据定义伪指令的格式,会用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

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