汇编语言程序例题

汇编语言程序例题
汇编语言程序例题

【例】试编写一程序计算以下表达式的值。

w=(v-(x*y+z-540))/x

式中x、y、z、v均为有符号字数据。

设x、y、z、v的值存放在字变量X、Y、Z、V中,结果存放在双字变量W之中,程序的流程图如图所示。

DATA SEGMENT

X DW 200

Y DW 100

Z DW 3000

V DW 10000

W DW 2 DUP()

DATA ENDS

STACK SEGMENT STACK

DB 200 DUP(0)

STACK ENDS

CODE SEGMENT

ASSUME DS:DATA,CS:CODE,SS:STACK

START:MOV AX,DATA

MOV DS,AX ;DATA→AX

MOV AX,X

IMUL Y ;(X)*(Y)→DX:AX

MOV CX,AX

MOV BX,DX ;(DX:AX)→(BX:CX)

MOV AX,Z

CWD ;(Z)符号扩展

ADD CX,AX

ADC BX,DX

;(BX:CX)+(DX:AX)→(BX:CX)

SUB CX,540

SBB BX,0 ;(BX:CX)-540→(BX:CX)

MOV AX,V

CWD ;(V)符号扩展

SUB AX,CX

SBB DX,BX

;(DX:AX)-(BX:CX)→(DX:AX)

IDIV X ;(DX:AX)/X

MOV W,AX ;商→W

MOV W+2,DX ;余数DX→W+2

MOV AH,4CH

INT 21H

CODE ENDS ;退出DOS 状态

END START

【例】已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在TAB表中,要查的学生的学号放在变量NO中,查表结果放在变量ENGLISH中。编写程序如下:STACK SEGMENT STACK

DB 200 DUP(0)

STACK ENDS

DATA SEGMENT

TAB DB 80,85,86,71,79,96

DB 83,56,32,66,78,84

NO DB 10

ENGLIST DB

DATA ENDS

CODE SEGMENT

ASSUME DS:DATA,SS:STACK,CS:CODE

BEGIN:MOV AX,DATA

MOV DS ,AX

LEA BX,TAB

MOV AL,NO

DEL AL

XLAT T AB

MOV ENGLISH,AL

MOV AH,4CH

INT 21H

CODE ENDS

END BEGIN

【例】已知在内存中有一个字节单元NUM,存有带符号数据,要求计算出它的绝对值后,放入RESULT单元中。

题目分析:根据数学中绝对值的概念知道,一个正数的绝对值是它本身,而一个负数的绝对值是它的相反数;要计算一个数的相反数,需要完成减法运算,即用0减去这个数。8086/8088指令系统中有专门的求相反数的指令NEG。

DATA SEGMENT

X DB -25

RESULT DB

DATA ENDS

CODE SEGMENT

ASSUME DS:DATA,CS:CODE

START: MOV AX,DATA

MOV DS,AX ;初始化

MOV AL,X ;X取到AL中

TEST AL,80H ;测试AL正负

JZ NEXT ;为正,转NEXT

NEG AL ;否则AL求补

NEXT: MOV RESULT,AL ;送结果

MOV AH,4CH

INT 21H ;返回DOS

CODE ENDS

END S TART

【例】编写计算下面函数值的程序:

1 X>0

Y= 0 X=0

-1 X<0

设输入数据为X、输出数据Y,且皆为字节变量。程序流程图如下图所示。

DATA SEGMENT

X DB -25

Y DB

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:MOV AX,DATA

MOV DS,AX ;初始化

MOV AL,X ;X取到AL中

CMP AL,0 ;Al中内容和0比较

JGE BIG ;大于等于0,转BIG

MOV BL,-1 ;否则为负数,-1送BL

JMP EXIT ;转到结束位置

BIG: JE EE ;Al中内容是否为0,为0转EE

MOV BL,1 ;否则为大于0,1送BL

JMP EXIT ;转到结束位置

EE:MOV BL,0 ;0送BL

EXIT: MOV Y,BL ;BL中内容送Y单元

MOV AH,4CH

INT 21H ;程序结束

CODE ENDS

END START ;汇编结束

【例】试编一程序,求三个带符号字数据中的最大值,并将最大值存入MAX字单元中。

设三个带符号数分别在三个字变量X、Y、Z中存储。程序流程图如下图所示

STACK SEGMENT STACK

DB 200 DUP(0)

STACK ENDS

DATA S EGMENT

X DW 00ABH

Y DW –5

Z DW 200

MAX D W

DATA E NDS

CODE S EGMENT

ASSUME DS:DATA,SS:STACK,CS:CODE

START:MOV AX,DATA

MOV DS,AX

MOV AX,X

CMP A X,Y ;X>Y

JG L1

MOV AX,Y ;Y>Z

CMP A X,Z

JG EXIT

L2:MOV AX,Z

JMP EXIT

L1:C MP AX,Z ;X>Z

JLE L2

EXIT:MOV MAX,AX

MOV AH,4CH

INT 21H

CODE ENDS

END START

【例】设某程序有8路分支,试根据给定的N值(1~8),将程序的执行转移到其中的一路分支。

程序流程如图下所示。

DATA SEGMENT

TAB DW P1,P2,P3,P4,P5,P6,P7,P8

N DB 5

DATA ENDS

STACK SEGMENT

DB 200 DUP(0)

STACK ENDS

CODE SEGMENT

ASSUME DS:DATA,SS:STACK,CS:CODE

START:MOV AX,DATA

MOV DS,AX

MOV AL,N

DEL AL

ADD AL,AL

MOV BL,AL

MOV BH,0

JMP TAB[BX]

P1:……

JMP EXIT

P2:……

JMP EXIT

P2:……

JMP EXIT

P3:……

JMP EXIT

P8:……

EXIT:MOV AH,4CH

INT 21H

CODE ENDS

END START

【例】已知有几个元素存放在以BUF为首址的字节存贮区中,试统计其中正元素的个数。

显然,每个元素为一个8位有符号二进制数,统计其中正元素的个数可用循环程序实现。其程序流程图如下图所示。

例】编写程序完成求1+2+3+……N的累加和,直到累加和超过1000为止。统计被累加的自然数的个数送CN单元,累加和送SUM。流程图如下图所示。

DATA SEGMENT

SUM DW

CN DW

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX ;初始化

MOV AX,0 ;0送AX

MOV BX,0 ;0送BX

LP: INC BX ;BX加1

ADD AX,BX ;求累加和

CMP AX,1000 ;比较

JBE LP ;≤1000转

MOV SUM,AX

MOV CN,BX ;送结果

MOV AH,4CH

INT 21H ;返回DOS

CODE ENDS

END START ;汇编结束

【例】在以BUF为首址的字存储区中存放有N个有符号数,现需将它们按大到小的顺序排列在BUF存储区中,试编写其程序。

我们采用冒泡排序算法从第一个数开始依次对相邻两个数进行比较,如次序对,则不交换两数位置;如次序不对则使这两个数交换位置。可以看出,第一遍需比较(N-1)次,此时,最小的数已经放到了最后;第二遍比较只需考虑剩下的(N-1)个数,即只需比较(N-2)次;第三遍只需比较(N-3)次,……整个排序过程最多需(N-1)遍。如下面的4个数即是采用冒泡排序比较的例子。

数10 8 16 90 32

第一遍10 16 90 32 8

第二遍16 90 32 10 8

第三遍90 32 16 10 8

程序流程图如图所示。

DATA S EGMENT

BUF DW 3,-4,6,7,9,2,0,-8,-9,-10,20

N=($-BUF)/2

DATA E NDS

STACK SEGNMENT STACK

DB 200 DUP(0)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START:MOV AX,DATA

MOV DS,AX

MOV CX,N

DEC CX

LOOP1:MOV DX,CX

MOV BX,0

LOOP2:MOV AX,BUF[BX]

CMP A X,BUF[BX+2]

JGE L

XCHG AX,BUF[BX+2]

MOV BUF[BX],AX

L:ADD BX,2

DEC CX

JNE LOOP2

MOV CX,DX

LOOP LOOP1

MOV AH,4CH

INT 21H

CODE ENDS

END START

程序运行后,BUF区中的内容如下:

20,9,7,6,3,2,0,-4,-8,-9,-10

若要对N个无符号数按由大到小的顺序排列,只需将指令“JGE L”改为“JAE L”即可。

【例】将一个给定的二进制数按位转换成相应的ASCII码字符串,送到指定的存储单元并显示。如二进制数转换成字符串为‘’。要求将转换过程写成子程序,且子程序应具有较好的通用性,而必须能实现对8倍和16倍二进制数的转换。

入口参数:

DX存放待转换的二进制数

CX存放待转换数的位数(8位或16位)

DI存放ASCII码首地址

出口参数:

转换后的字符串存放在以DI作指针的字节存贮区中

程序清单:

DATA S EGMENT

NUM8 DB 93H

NUM16 DW 0ABCDH

ASCBUF DB 20 DUP(0)

DATA E NDS

CODE SEGMENT

ASSUME DS:DATA,CS:CODE,SS:STACK

START:MOV AX,DATA

MOV DS,AX

MOV DX,0

MOV DL,NUM8 ;转换二进制数送DX

MOV CX,8 ;置位数8

LEA DI,ASCBUF ;字符串首址→DI

CALL B TASC ;调用子程序BTASC

MOV [DI],BYTE PTR 0DH

MOV [DI+1],BYTE PTR 0AH

MOV [DI+2],BYTE PTR ‘$’

LEA DX,ASCBUF

MOV AH,9

INT 21H

MOV DX,NUM16

MOV CX,16 ;置位数16

LEA DI,ASCBUF

CALL B TASC

MOV[DL],BYTE PTR 0DH

MOV [DL+1],BYTE PTR 0AH

MOV [DL+2],BYTE PTR ‘$’;显示转换后的字符串 LEA DX,ASCBUF

MOV AH,9

INT 21H

BTASC PROC

PUSH AX ;保存AX

MOV AL,0

CMP C X,8 ;比较8位数

JNE L1 ;直接转换16位数

MOV DH,DL ;8位数转换送DH

L1: ROL DX,,1 ;DX最高位移入CF

RCL AL,1 ;CF移入AL最低位

ADD AL,30H

MOV [DI],AL

INC DI

LOOP L1

POP AX

RET

BTASC ENDP

CODE ENDS

END START

嵌入式简单汇编程序实例

ARM实验报告 姓名:郭健傧学号:L2101898 1.实验目的 (1)了解ADS1.2集成开发环境及ARMulator软件仿真; (2)熟悉ARM的乘法指令和逻辑指令; (3)结合ARM处理器硬件特性,比较处理函数的特性; 2.实验设备 硬件:pc机一台; 软件:Windowsxp系统,ADS1.2集成开发环境; 3.实验内容 (1)建立一个新的工程; (2)建立一个汇编文件,并添加到工程; (3)根据所给的两个C语言函数编写相应的汇编程序,并比较一下代码中fact1和fact2两个函数的特性; 4.实验步骤 (1)启动ADS1.2IDE集成开发环境,使用ARM Executable Image 工程模块建立一个工程heiye。 (2)建立汇编源文件test.s,编写程序实验,并添加到工程heiye中。 (3)设置工程连接地址Ro Base为0x40000000,RWBase为0x40003000。设置调试入口地址Image entry point为0x40000000。 (4)编译链接工程,并启动AXD进行软件仿真调试。 5.编写程序如下: C程序源代码: int fact1(int limit) { int fact=1; for(i=1;i

单片机习题集(含答案)经典

单片机原理及应用习题 第一章绪论 1-1单项选择 1、计算机中最常用的字符信息编码是()。 (A)ASCII (B)BCD码(C)余3码(D)循环码 2、-31D的二进制补码为.( )。 (A)1110000B (B)11100001B (C)01100000B (D)01100001B 3、十进制29的二进制表示为原码()。 (A)11100010B (B) 10101111B (C)00011101B (D)00001111B 4、十进制0.625转换成二进制数是()。 (A)0.101 (B) 0.111 (C)0.110 (D)0.100 5、十六进制数7的ASCII码是()。 (A) 37 (B) 7 (C) 07 (D) 47 6、十六进制数B的ASCII码是()。 (A) 38 (B) 42 (C) 11 (D) 1011 7、通常所说的主机是指() (A)运算器和控制器(B)CPU和磁盘存储器(C)CPU和主存储器(D)硬件和软件 8、使用单片机实现在线控制的好处不包括( ) (A)精确度高(B)速度快(C)成本低(D)能与数据处理结合 1-2填空 1、计算机中常作的码制有、和。 2、十进制29的二进制表示为。 3、十进制数-29的8位补码表示为。 4、是计算机与外部世界交换信息的载体。 5、十进制数-47用8位二进制补码表示为。 6、-49D的二进制补码为。 7、计算机中的数称为,它的实际值叫。 8、单片机的存储器结构形式有普林斯顿结构(又称冯.依诺曼结构)与哈佛结构,MCS-51存储器采用的是结构。

1-3 问答题 1、何谓单片机?单片机与一般微型计算机相比,具有哪些特点? 2、单片机主要应用在哪些领域? 3、为什么80C51系列单片机能成为8位单片机应用主流? 4、举例说明单片机的主要应用领域。 5、二进制数、十进制数、十六进制数各用什么字母尾缀作为标识符?无标识符时表示什么进制数? 6、试比较MCS-51,MSP430,EM78,PIC,M6800及AVP等系列单片机的特点。 第二章 MCS-51单片机的硬件结构与工作原理 2-1 单项选择 1、要MCS-51系统中,若晶振频率屡6MHz,一个机器周期等于( ) μs A 1 B 2 C 3 D 0.5 2、以下不是构成的控制器部件(): A 程序计数器、 B指令寄存器、 C指令译码器、 D存储器 3、以下不是构成单片机的部件() A 微处理器(CPU)、B存储器 C接口适配器(I\O接口电路) D 打印机 4、下列不是单片机总线是() A 地址总线 B 控制总线 C 数据总线 D 输出总线 5、PSW=18H时,则当前工作寄存器是() (A)0组(B)1组(C)2组(D)3组 6、P1口的每一位能驱动() (A)2个TTL低电平负载有(B)4个TTL低电平负载 (C)8个TTL低电平负载有(D)10个TTL低电平负载 7、MCS-51的中断允许触发器内容为82H,CPU将响应的中断请求是( ) (A) T0, (B)T1 (C)串行接口 (D) INT0 8、外部中断0的中断入口地址为() (A)0003H (B)000BH (C)0013H (D)001BH 9、内部定时/计数器T0的中断入口地址为() (A)0003H (B)000BH (C)0013H (D)001BH 10、在中断服务程序中,至少应有一条( )

微机原理 典型例题

[问题] 在MOV WORD PTR [0074H],55BBH指令的机器代码中,最后一个字节是 (难度系数:3) [选择答案] A. 00H B. 74H C. 55H D. BBH [正确答案] C [问题] 由于CPU内部的操作速度较快,而CPU访问一次主存所花的时间较长,因此机器周期通常用_____来规定 (难度系数:3) [选择答案] A. 主存中读取一个指令字的最短时间 B. 主存中读取一个数据字的最长时间 C. 主存中写入一个数据字的平均时间 D. 主存中取一个数据字的平均时间 [正确答案] A [问题] 程序控制类指令的功能是_____

(难度系数:3) [选择答案] A. 进行算术运算和逻辑运算 B. 进行主存与CPU之间的数据传送 C. 进行CPU和I/O设备之间的数据传送 D. 改变程序执行的顺序 [正确答案] D [问题] 虚拟存贮器的主要目的是_____ (难度系数:3) [选择答案] A. 提高主存贮器的存取速度 B. 扩大主存贮器的存贮空间,并能进行自动管理和调度 C. 提高外存贮器的存取速度 D. 扩大外存贮器的存贮空间 [正确答案] B [问题] 位操作类指令的功能是______ (难度系数:3) [选择答案] A. 对CPU内部通用寄存器或主存某一单元任一位进行状态检测(0或1) B. 对CPU内部通用寄存器或主存某一单元任一位进行状态强置(0或1)

C. 对CPU内部通用寄存器或主存某一单元任一位进行状态检测或强置 D. 进行移位操作 [正确答案] C [问题] 在微型机系统中,外围设备通过____与主板的系统总线相连接(难度系数:3) [选择答案] A. 适配器 B. 设备控制器 C. 计数器 D. 寄存器 [正确答案] A [问题] 系统总线中地址线的功能是______ (难度系数:3) [选择答案] A. 选择主存单元地址 B. 选择进行信息传输的设备 C. 选择外存地址 D. 指定主存和I/O设备接口电路的地址 [正确答案]

STC12系列单片机的PWM输出汇编语言示例程序

STC12系列单片机的PWM输出汇编语言示例程序

对于以下程序我的理解是:equ是一个符号定义伪指令pulse_width_max equ 0f0HMOV A,#pulse_width_max 它的意思是:将pulse_width_max里的值作为数值赋到寄存器A里.MOV A,pulse_width_max 它的意思是:将pulse_width_max里的值作为地址赋到寄存器A里. 相关帖子>>>: ?我的8个PWM给你参考(2774字)coody[63次]2006-8-29 15:01:43 ;************************************************************** ?;************************************************************** ?T0interrupt: ;max 53T ? PUSH PSW ? PUSH ACC ? ?;*************************** 30T *********************************** ? MOV P1,PWM_TEMP ? ? INC PWM_DUTY ? MOV A,PWM_DUTY ? JNZ L_PWM ? MOV PWM_TEMP,PWM_TEMP1 ? SJMP L_QuitPWM ?

?L_PWM: ? CJNE A,PWM0,L_NotClearPWM0 ? SETB B_PWM0 ?L_NotClearPWM0: ? ? CJNE A,PWM1,L_NotClearPWM1 ? SETB B_PWM1 ?L_NotClearPWM1: ? ? CJNE A,PWM2,L_NotClearPWM2 ? SETB B_PWM2 ?L_NotClearPWM2: ? ? CJNE A,PWM3,L_NotClearPWM3 ? SETB B_PWM3 ?L_NotClearPWM3: ? ? CJNE A,PWM4,L_NotClearPWM4 ? SETB B_PWM4 ?L_NotClearPWM4: ? ? CJNE A,PWM5,L_NotClearPWM5 ? SETB B_PWM5 ?L_NotClearPWM5: ? ? CJNE A,PWM6,L_NotClearPWM6 ? SETB B_PWM6 ?L_NotClearPWM6: ? ? CJNE A,PWM7,L_NotClearPWM7 ? SETB B_PWM7 ?L_NotClearPWM7: ?L_QuitPWM: ?;************************************************************** ? ?L_QuitT0Interrupt: ? POP ACC ? POP PSW

汇编语言例子

实验三: 1)题目:在内存中从ARRAY开始的连续三个字节单元存放着30H,40H,50H。编制程序将这三个连续的数据传送到内存TABLE开始的单元。 DATA SEGMENT ARRAY DB 30H,40H,50H 定义数据段 TABLE DB 3 DUP (?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,ARRAY LEA DI,TABLE MOV CX,3 REP MOVSB JMP $ CODE ENDS END START (2)题目:把内存2000H和3000H字单元的内容相加,结果存入4000H单元。(不考虑溢出) DATA SEGMENT ORG 2000H DW 1234H ORG 3000H DW 5678H ORG 4000H DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,[2000H] ADD AX,[3000H] MOV [4000H],AX JMP $ CODE ENDS END START 实验四 1、数据传送指令和算术运算指令完成NUM1和NUM2相加,结果放入SUM中。

DATA SEGMENT NUM1 DW 0012H,0030H,0FC21H ; 数1 NUM2 DW 3E81H,44E9H,6D70H ; 数2 SUM D W 3 DUP(?) ; 结果单元 DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV CX,3 LEA SI,NUM1 LEA DI,NUM2 LEA AX,SUM HE: MOV BX,[SI] ADD BX,[DI] MOV [AX],BX INC SI INC DI INC AX LOOP HE MOV AH, 4CH ; 返回DOS INT 21H CODE ENDS END START 2、内存中自TABLE开始的七个单元连续存放着自然数0至6的立方值(称作立方表)。;任给一数X(0≤X≤6)在XX单元,查表求X的立方值,并把结果存入YY单元中。;提示用XLAT指令 DATA SEGMENT TABLE DB 0H,1H,2H,3H,4H,5H,6H XX DB 1 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA BX,TABLE MOV AL,[XX] XLAT MOV DL,AL MOV AH,02H INT 21H JMP $

典型试题

第一章典型试题 一. 填空题 https://www.360docs.net/doc/451999537.html,/wlzx/%BA%CF%B9%A4%B4%F3/%BB%E3%B1%E0%D3%EF%D1%D4%B3%CC%D0%F2%C9%E8%BC%C6/huibian/mulu.htm 1一个十进制数1092其对应的二进制数为____,十六进制为____。 2.某内存单元中存放的二进制代码为94H,其对应一个无符号十进制数为____,一个带符号十进制数为____,一个BCD码数为____。 4.将8存放在一个字单元中,则该单元中的二进制代码是____。 5.机器用8位二进制代码表示带符号数的数值范围是____,用16位二进制代码表示带符号数的数值范围是____。 6.数据26对应的ASCII码为____, 7.8086/8088CPU含有____根地址总线,直接寻址范围为____。 8.8086/8088CPU系统中,I/O端口地址范围是____。 9.8086/8088存储单元的物理地址在逻辑上可分成两个组成部分,即____和____,它们的长度均为____位。 10.8086/8088CPU内部一般用来存放数据的寄存器有____。 11.8086/8088CPU内部用来存放段地址寄存器的有____。 12.在状态标志寄存器F中设置了两种类型的标志位,其中____位作为状态标志位,____位作为控制标志位。 13.一个字单元有二个连续的____单元组成,其中数据的低8位存放在____单元,高8位存放在____单元。 二.单项选择题 1.将汇编语言翻译成机器语言的系统软件()。 A.编译程序 B.解释程序 C.汇编程序 D.编辑程序 2.能够将目标模块或子程序连接起来,生成可执行文件的系统程序是()。 A.DEBUG B.LINK C.MASM D.EDIT 3.设(101)x=(41)16,求x=()。 A.x=6 B.x=10 C.x=8 D.x=2 4.用十六位二进制补码表示一个带符号数,最小数为()。

汇编语言典型例题

典型例题(与考试题型,考试范围相近) 1.应用程序具有3个基本段,可执行指令应该保存于( A )。 A) 代码段B) 数据段C) 堆栈段D) 附加段 2. 8位补码F3H要扩展成16位补码应该是( D ),这样其真值才不变。 A) F0F3H B) 00F3H C) 10F3H D) FFF3H 3. “mov [ebx+8],eax”指令的目的操作数采用( C )寻址方式。 A) 存储器间接B) 寄存器C) 寄存器相对D) 立即数 4. 执行“sar ebx,1”指令后,ebx最高D31位一定等于( D ) A) 0 B) 1 C) D0位D) D30位 5. 在代码段内的-128~127个字节前后范围的跳转,可以用( C )类型名表示。 A) WORD B) DWORD C) SHORT D) FAR 6. 在Windows控制台环境,在当前光标显示信息应该使用( B )函数(功能)。 A) ReadConsole B) WriteConsole C) MessageBox D) GetStdHandle 7.汇编语言源程序经汇编后不能直接生成( C ) A) OBJ文件B) LST文件C) EXE文件D) CRF文件 8.在ADD指令中,两个操作数的物理位置不可以安排在( A )中。 A) 两个主存储单元 B) 一个主存储单元和一个数据寄存器 C) 两个数据寄存器 D) 一个堆栈单元和一个数据寄存器 9.假定ax=6987h,执行指令cmp ax,0eb30h后,则标志位CF和OF的状态( C )。 A)0,0 B) 0,1 C) 1,0 D) 1,1 10.假定esp=00120100h,eax=1f6c2107h,执行指令push ax后,存放数据07h的物理地址是( C )。 A) 00120104h B) 00120101h C) 001200fch D) 001200ffh 11.下列对标志寄存器中标志位产生影响的指令是( B ) A) jmp done B) shl eax, 2 C) call subp D) not eax 12. 假设CL=98H, 执行“MOVSX DX, CL”后,DX=( D ) A) F098H B) 0098H C) 1098H D) FF98H 13. “mov 80h[esi], eax”指令的目的操作数采用( C )寻址方式。

汇编语言程序例题

【例】试编写一程序计算以下表达式的值。 w=(v-(x*y+z-540))/x 式中x、y、z、v均为有符号字数据。 设x、y、z、v的值存放在字变量X、Y、Z、V中,结果存放在双字变量W之中,程序的流程图如图所示。 DATA SEGMENT X DW 200 Y DW 100 Z DW 3000 V DW 10000 W DW 2 DUP() DATA ENDS STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE,SS:STACK START:MOV AX,DATA MOV DS,AX ;DATA→AX MOV AX,X IMUL Y ;(X)*(Y)→DX:AX MOV CX,AX

MOV BX,DX ;(DX:AX)→(BX:CX) MOV AX,Z CWD ;(Z)符号扩展 ADD CX,AX ADC BX,DX ;(BX:CX)+(DX:AX)→(BX:CX) SUB CX,540 SBB BX,0 ;(BX:CX)-540→(BX:CX) MOV AX,V CWD ;(V)符号扩展 SUB AX,CX SBB DX,BX ;(DX:AX)-(BX:CX)→(DX:AX) IDIV X ;(DX:AX)/X MOV W,AX ;商→W MOV W+2,DX ;余数DX→W+2 MOV AH,4CH INT 21H CODE ENDS ;退出DOS 状态 END START 【例】已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在TAB表中,要查的学生的学号放在变量NO中,查表结果放在变量ENGLISH中。编写程序如下:STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS DATA SEGMENT TAB DB 80,85,86,71,79,96 DB 83,56,32,66,78,84 NO DB 10 ENGLIST DB DATA ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE BEGIN:MOV AX,DATA MOV DS ,AX LEA BX,TAB MOV AL,NO DEL AL XLAT T AB MOV ENGLISH,AL MOV AH,4CH INT 21H CODE ENDS END BEGIN

微机原理期末必考复习题目

微机原理期末复习题目 第一章计算机基本知识 【复习重点】 1、常用数制及其相互间的转换; 2、机器数表示:原码、反码、补码的表示及求法; 3、BCD编码及常用字符的ASCII码; 4、计算机中的常用术语 【典型习题】 ?在计算机中,1KB= 1024 byte。 ?对于十六进制表示的数码19.8H,转换为十进制数时为:25.5 ;用二进制数表示时为:11001.1 B;该数码用压缩BCD码表示时数据为:00100101.0101B或25.5H 。?设机器字长为8位,最高位是符号位。则十进制数–13所对应的原码为:10001101B ;补码为11110011B 。 ?一个8位二进制数用补码方式表示的有符号数的范围是-128~+127 。 ?软件通常分为系统软件和应用软件两大类。 ?微型计算机中主要包括有 A 。 A.微处理器、存储器和I/O接口 B.微处理器、运算器和存储器 C.控制器、运算器和寄存器组 D.微处理器、运算器和寄存器 第二章8080系统结构 【复习重点】 1 、CPU 内部的功能结构; 2 、寄存器阵列结构及各寄存器的功能; 3 、标志寄存器各标志位的名称及含义; 【典型习题】 1、8086中的BIU中有 4 个16 位的段寄存器、一个16 位的指令指针、 6 字节指令队列、20 位的地址加法器。 2、8086 可以访问8 位和16 位的寄存器。 3、8088/8086 CPU中,指令指针(IP)中存放的是 B 。 A.指令B.指令地址 C.操作数D.操作数地址 4、8086CPU内部由哪两部分组成?它们的主要功能是什么? 答:BIU(或总线接口单元):地址形成、取指令、指令排队、读/写操作数及总线控制等所有与外部的操作由其完成。 EU(或指令执行单元):指令译码和执行指令

汇编教程汇编语言编程实例

汇编语言编程实例一这一章,我们要把我们已学的知识集合起来。具体来讲,我们来写一个使用ODBC APIs的程序.为简单起见,这个程序中我使用Microsoft的Access数据库(Microso ft Access 97) . 注意:如果你使用的windows.inc 是1.18及其以下版本,在开始编译之前要修改其中的一个小bug.在windows.inc中查找 "SQL_NULL_HANDLE",将得到下面这行: SQL_NULL_HANDLE equ 0L 将0后面的"L"删除,象这样: SQL_NULL_HANDLE equ 0 这个程序是一个基于对话框的程序,有一个简单的菜单.当用户选择"connect"时,它将试图连接test.mdb数据库,如果连接成功,将显示由ODBC驱动程序返回的完整连接字符串.接下来,用户可选择"View All Records"命令,程序会使用listview control来显示数据库中的所有数据.用户还可以选择"Query"命令来查询特定的记录.例子程序将会显示一个小对话框提示用户输入想找的人名.当用户按下OK钮或回车键,程序将执行一个查询来查找符合条件的记录.当用户完成对数据库的操作时,可以选择"disconnect"命令与数据库断开连接. 现在看一下源程序: .386 .model flat,stdcall include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\odbc32.inc include \masm32\include\comctl32.inc include \masm32\include\user32.inc includelib \masm32\lib\odbc32.lib includelib \masm32\lib\comctl32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib IDD_MAINDLG equ 101 IDR_MAINMENU equ 102 IDC_DATALIST equ 1000 IDM_CONNECT equ 40001 IDM_DISCONNECT equ 40002 IDM_QUERY equ 40003 IDC_NAME equ 1000 IDC_OK equ 1001 IDC_CANCEL equ 1002 IDM_CUSTOMQUERY equ 40004 IDD_QUERYDLG equ 102 DlgProc proto hDlg:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD

24个汇编实例小程序

24个汇编小程序 题目列表: 1.逆序输出字符串“BASED ADDRESSING” 2.从键盘上输入两个数,分别放到x,y单元,求出它们的和 3.是编写一段程序,要求在长度为10h的数组中,找出大于42h的无符号数的个数并存入地址为up开始区域,找出小于42h的无符号数的个数并存入地址为down的开始区域 4.键盘输入一段字符串,其中小写字母以大写字母输出,其他字符不变输出 5.从键盘上就收一个小写字母,找出它的前导字符和后续字符,在顺序显示这三个字符 7.把一个包含20个数据的数组M分成两组:正整数组P和负整数组N,分别把这两个数组中的数据的个数显示出来 8.求出首地址为data的100个字数组中的最小偶数,并把它放在ax中 9输入两船字符串string1和string2,并比较两个字符串是否相等,相等就显示“match”,否则显示“no match” 10从键盘接收一个四位的十六进制数,并在终端显示与它等值的二进制数 11从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果 12有一个首地址为mem的100个字的数组,试编程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零 13.从键盘上输入一串字符(用回车键结束,使用10号功能调用)放在string中,是编制一个程序测试字符串中是否存在数字。如有,则把cl的第五位置1,否则将该位置置0 14.在首地址为data的字数组中,存放了100h的16位字数据,试编写一个程序,求出平均值放在ax寄存器中,并求出数组中有多少个数小于此平均值,将结果放在bx寄存器中(f 分别考虑有符号数、无符号数情况) 15.一直数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。试编制一个程序,把既在A中又在B中出现的整数存放于数组C中 16.设在A、B和D单元中分别存放着三个数。若三个数都不是0,则求出三个数的和并存

汇编语言程序实例

一:题目 编写求十进制数12678532与41412042(本人学号)之和的程序,并将和以十进制数的形式送屏幕显示。 二:要求 (1)两个加数均以压缩(组合)十进制数形式存放在ADD1和ADD2为首址的存贮器单元。 (2)和以压缩十进制数的形式存入SUM以下单元。 (3)将和送到屏幕显示部分功能的实现采用子程序的形式。三:算法设计 1:程序 DATAS SEGMENT ;此处输入数据段代码 ADD1 DD 12678532H ADD2 DD 41412042H SUM DD ? DATAS ENDS STACKS SEGMENT STACK 'STACK';此处输入堆栈段代码 DW 100H DUP(?) TOP LABEL WORD STACKS ENDS CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV AX,STACKS MOV SS,AX ; LEA SP,TOP LEA SI,ADD1 LEA DI,ADD2 MOV AL,[SI] ADD AL,[DI] DAA MOV BYTE PTR SUM,AL MOV AL,[SI+1] ADC AL,[DI+1] DAA MOV BYTE PTR SUM+1,AL MOV AL,[SI+2] ADC AL,[DI+2] DAA MOV BYTE PTR SUM+2,AL

MOV AL,[SI+3] ADC AL,[DI+3] DAA MOV BYTE PTR SUM+3,AL MOV AX,WORD PTR SUM+2 CALL DISPAX MOV AX,WORD PTR SUM CALL DISPAX ; MOV AH,4CH INT 21H DISPAL PROC NEAR PUSH AX PUSH CX PUSH DX PUSH AX MOV CL,4 SHR AL,CL CALL CHANG MOV AH,02 MOV DL,AL

16 32位微机原理汇编语言及接口技术教程课后习题答案

《16/32位微机原理、汇编语言及接口技术教程》 部分习题参考解答 第1章微型计算机系统概述 〔习题1.2〕 什么是通用微处理器、单片机(微控制器)、DSP芯片、嵌入式系统? 〔解答〕 通用微处理器:适合较广的应用领域的微处理器,例如装在PC机、笔记本电脑、工作站、服务器上的微处理器。 单片机:是指通常用于控制领域的微处理器芯片,其内部除CPU外还集成了计算机的其他一些主要部件,只需配上少量的外部电路和设备,就可以构成具体的应用系统。 DSP芯片:称数字信号处理器,也是一种微控制器,其更适合处理高速的数字信号,内部集成有高速乘法器,能够进行快速乘法和加法运算。 嵌入式系统:利用微控制器、数字信号处理器或通用微处理器,结合具体应用构成的控制系统,其典型的特点是把计算机直接嵌入到应用系统之中。 〔习题1.5〕 说明微型计算机系统的硬件组成及各部分作用。 〔解答〕 CPU:CPU也称处理器,是微机的核心。它采用大规模集成电路芯片,芯片内集成了控制器、运算器和若干高速存储单元(即寄存器)。处理器及其支持电路构成了微机系统的控制中心,对系统的各个部件进行统一的协调和控制。 存储器:存储器是存放程序和数据的部件。 外部设备:外部设备是指可与微机进行交互的输入(Input)设备和输出(Output)设备,也称I/O设备。I/O设备通过I/O接口与主机连接。 总线:互连各个部件的共用通道,主要含数据总线、地址总线和控制总线信号。 〔习题1.6〕 什么是总线?微机总线通常有哪3组信号?各组信号的作用是什么?

〔解答〕 总线:传递信息的共用通道,物理上是一组公用导线。 3组信号线:数据总线、地址总线和控制总线。 (1)地址总线:传输将要访问的主存单元或I/O端口的地址信息。 (2)数据总线:传输读写操作的数据信息。 (3)控制总线:协调系统中各部件的操作。 〔习题1.7〕 简答如下概念: (1)计算机字长 (2)取指-译码-执行周期 (3)ROM-BIOS (4)中断 (5)ISA总线 〔解答〕 (1)处理器每个单位时间可以处理的二进制数据位数称计算机字长。 (2)指令的处理过程,即指处理器从主存储器读取指令(简称取指),翻译指令代码的功能(简称译码),然后执行指令所规定的操作(简称执行)的过程。 (3)ROM-BIOS是“基本输入输出系统”,操作系统通过对BIOS的调用驱动各硬件设备,用户也可以在应用程序中调用BIOS中的许多功能。 (4)中断是CPU正常执行程序的流程被某种原因打断、并暂时停止,转向执行事先安排好的一段处理程序,待该处理程序结束后仍返回被中断的指令继续执行的过程。 (5)ISA总线是指IBM PC/AT机上使用的系统总线。 〔习题1.8〕 下列十六进制数表示无符号整数,请转换为十进制形式的真值: (1)FFH (2)0H (3)5EH (4)EFH 〔解答〕 (1)255 (2)0 (3)94 (4)239 〔习题1.9〕 将下列十进制数真值转换为压缩BCD码: (1)12 (2)24 (3)68 (4)99 〔解答〕 (1)12H

LCD汇编程序示例

;----------逐字依次输入方式----------- COM EQU 20H ; 指令寄存器 DAT EQU 21H ; 数据寄存器 CW_Add EQU 8000H ; 指令口写地址 CR_Add EQU 8200H ; 指令口读地址 DW_Add EQU 8100H ; 数据口写地址 DR_Add EQU 8300H ; 数据口读地址 ORG 0000H MAIN:MOV SP,#60H MOV A,#30H ;功能指令设置 MOV DPTR,#CW_Add MOV R2,#03H L1:MOVX @DPTR,A LCALL DELAY DJNZ R2,L1 MOV COM,#38H ;设置工作方式 LCALL PR1 MOV COM,#01H ;清屏 LCALL PR1 MOV COM,#06H ;设置输入方式 LCALL PR1 MOV COM,#0FH ;设置显示方式 LCALL PR1 MOV COM,#80H ;设置DDRAM地址00H LCALL PR1 MOV DPTR,#TAB MOV R2,#12 ;显示前8位 MOV R3,#00 WRIN: MOV A,R3 MOVC A,@A+DPTR MOV DAT,A LCALL PR2 LCALL DELAY INC R3 DJNZ R2,WRIN SJMP $ ;-------写指令代码子程序--------- PR1: PUSH DPH PUSH DPL PUSH ACC MOV DPTR,#CR_ADD PR11: MOVX A,@DPTR JB ,PR11 MOV A,COM

MOV DPTR,#CW_ADD MOVX @DPTR,A POP ACC POP DPL POP DPH RET ;--------写显示数据子程序---------- PR2: PUSH DPH PUSH DPL PUSH ACC MOV DPTR,#CR_ADD PR21:MOVX A,@DPTR JB ,PR21 MOV A,DAT MOV DPTR,#DW_ADD MOVX @DPTR,A POP ACC POP DPL POP DPH RET DELAY:MOV R6,#00H MOV R7,#00H DELAY1:NOP DJNZ R7,DELAY1 DJNZ R6,DELAY1 RET TAB: DB 43H,75H,72H,73H,6FH,72H,20H ;Cursor DB 57H,72H,69H,74H,65H ;write END ;----------逐字依次输入,两行显示方式----------- COM EQU 20H ; 指令寄存器 DAT EQU 21H ; 数据寄存器 CW_Add EQU 8000H ; 指令口写地址 CR_Add EQU 8200H ; 指令口读地址 DW_Add EQU 8100H ; 数据口写地址 DR_Add EQU 8300H ; 数据口读地址 ORG 0000H MAIN:MOV SP,#60H MOV A,#30H ;功能指令设置 MOV DPTR,#CW_ADD MOV R2,#03H L1:MOVX @DPTR,A

计算机组成原理与汇编语言课后习题及作业答案

《计算机组成原理与汇编语言》课后习题及作业答案 王建东2006年9月 第一章习题参考答案 1、什么是存储程序工作方式? (P.2.) 答:(1) 事先编制程序 (2) 实现存储程序 (3) 自动、连续地执行程序 2、采用数字化方法表示信息有哪些优点? (P.5.) 答:(1) 抗干扰能力强,可靠性高 (2) 在表示数值时,可以获得很宽的表示范围以及很高的精度。 (3) 数字化的信息可以存储,信息传送也比较容易实现。 (4) 可表示的信息类型与范围及其广泛,几乎没有限制。 (5) 能用逻辑代数等数字逻辑技术进行信息处理,着就形成了计算机硬件设计的基础。 3、如果有7X9点阵显示出字符A的图像,请用9个七位二进制代码表示A的点阵信息。 0000000 0001000 0010100

0100010 0111110 0100010 0100010 0100010 0000000 4、数字计算机的主要特点是什么?(P.16.) 答:(1) 能在程序控制下自动连续地工作 (2) 运算速度快 (3) 运算精度高 (4) 具有很强的信息存储能力 (5) 通用性强,应用领域极其广泛 5、衡量计算机的基本指标有哪些?(P.17.) 答:(1)基本字长 (2)数据通路宽度 (3)运算速度 (4) 主存储器容量 (5) 外存容量 (6) 配置的外围设备及其性能 (7) 系统软件配置

6、举出一种实际计算机,列举出各部件、设备的技术性能及常配置的软件? 略 7、软件系统一般包含哪些部分?列举你熟悉的三种系统软件。 (P.9.) 答:系统软件是一组使计算机良好运行而编制的基础软件。它包括: (1)操作系统如:Windows 2000,Linux,Unix (2)编译程序、解释程序如:C++编译程序,Peal解释程序 (3)各种软件平台如:数据库管理系统 8、对源程序的处理有哪两种基本方式? (P.11.) 答:对源程序的处理有解释和编译两种类型。 解释方式是边解释边执行。如:BASIC 它的优点是支持人机对话方式的程序设计,可以边执行边修改;所需要的主存空间较小。但这种方式执行速度较慢,不能解释那些前后关联较多,较难理解的程序设计语言。 编译方式是将源程序全部翻译成机器语言的指令序列,称为目标程序(目标代码)。执行时,计算机将直接执行目标程序,不再需要源程序与翻译程序。在执行程序时,所需主存小,执行速度也较快。 第二章习题参考答案 1、将二进制数 ( 101010.01 )2 转换为十进制数及BCD码

单片机汇编语言入门实例

一、用单片机控制发光二极管 图1为单片机控制发光二极管的实验电路图。图中用P1口作为输出端,P1口的P1.0~P1.7引脚分别接了8个LED。 实例1:用单片机控制LED闪烁发光 源程序如下: MAIN: SETB P1.0 LCALL DELAY CLR P1.0 LCALL DELAY LJMP MAIN DELAY:

MOV R7,#250 D1:MOV R6,#250 D2:DJNZ R6,D2 DJNZ R7,D1 RET END 程序说明: 1、SETB P1.0:将P1.0口置“1”,既让P1.0输出高电平,让LED 熄灭。 2、LCALL DELAY:LCALL称为子程序调用指令,指令后面的参数DELAY是一个标号,用于标识第6行程序,执行LCALL指令时,程序转到LCALL后面的标号所指示的程序行处执行,如果执行指令过程中遇到RET指令,则程序就返回到LCALL指令下面的一条指令继续执行。 3、CLR P1.0:将P1.0口置“0”,既让P1.0输出低电平,让LED 亮。 4、LCALL DELAY:调用延时子程序DELAY。 5、LJMP MAIN:跳转到第1条指令处执行第1条指令。 6、第6~10条指令是一段延时子程序,子程序只能在被调用时运行,并有固定的结束指令RET。 7、END:不是S51单片机的指令,不会产生单片机可执行的代码,而是用于告诉汇编软件“程序到此结束”,这类用于汇编软

件控制的指令称为“伪指令”。 延时程序说明: 1、程序中的R6、R7代表工作寄存器的单元,用来暂时存放一些数据。 2、MOV指令的含义是传递数据。指令“MOV R7,#250”的含义是:将数据250送到R7中。250前面的“#”号表示250是一个数,而不是一个地址,“#”号后面的数称为立即数。 3、DJNZ指令后面有两个符号,一个是R6,一个是D2。R6是寄存器,D2是标号。DJNZ指令的执行过程是:将其后面第一个参数中的值减1,然后看这个值是否等于0,如果等于0,往下执行,如果不等于0,则转移到第二个参数所指定的位置去执行,这里是转移到由D2所标识的这条语句去执行。本条指令的最终执行结果是:这条指令被执行了250次(此前R6中已被送了一个数:250)。 在执行完“DJNZ R6,D2”后(即R6中的值等于0后),转去执行下一行程序,即“DJNZ职R7,D1”。由于R7中的值不为0,所以减1后转去D1标号处,即执行“MOV R6,#250”这一行程序,这样R6中又被送入250这个数,然后再去执行“DJNZ R6,D2”这条指令,最终的结果是:“DJNZ R6,D2”这条指令被执行了250×250=62500次,从而实现延时的效果。 4)RET指令的作用是:子程序在执行过程中如果遇到这条指令,会返回到主程序,到调用这段子程序指令的下一条指令继续执行。

单片机基础汇编语言编程实例

单片机基础汇编语言编程实例 单片机汇编语言编程 1.编写程序,用位处理指令实现“P1.4=P1.0∨(P1.1∧P1.2)∨P1.3”的逻辑 功能。 MOV C,P1.1ANL C,P1.2ORL C,P1.0ORL C,P1.3MOV P1.3,C2.编写程序,若累加器A 的内容分别满足下列条件,则程序转到LABLE 存储单元。设A 中存 放的的无符号数。(1)A≥10;(2)A>10;(3)A≤10。(1)CJNE A,#10,NEXTLJMP LABLENEXT:JNC LABLE(2)CJNE A,#10,NEXTLJMP NEXT2NEXT:JNC LABLENEXT2:(3)CJNE A,#10,NEXTLJMP LABLENEXT:JC LABLE3.编写程序,查找片内RAM 的30H~50H 单元中是 否有55H 这一数据,若有,则51H 单元置为FFH;若未找到,则将51H 单元 清0。MOV R0,29HNEXT:INC R0CJNE R0,#51H,NEXT2MOV 51H,#0FFHAJMP OVERNEXT2:CJNE @R0,#55H,NEXTMOV 51H,#0OVER:4.编写程序,查找片内RAM 的30H~50H 单元中出现0 的次数,并将查找的结果存入51H 单元。MOV R0,30HMOV 51H,#0NEXT:CJNE @R0,#00H,NEXT2INC 51HNEXT2:INC R0CJNE R0,#51H,NEXT5.在片外RAM 中有一个数据块,存有若干字符、数字,首地址为SOURCE 要求将该数据块传送到片内RAM 以DIST 开始的区域,直到遇到字符“$”时结束($也要传送,它的ASCII 码为24H)。MOV DPTR,#SOURCEMOV R0,#DISTNEXT:MOVX A,@DPTRMOV @R0,AINC DPTRINC R0CINE A,#24H,NEXT6.片内RAM 的30H 和31H 单元中存放着一个16 位的二进制数,高位在前,低位在后。编写程序对其求补,并存回原处。CLR CMOV A,#0SUBB A,31HMOV 31H,AMOV A,#0SUBB A,30HMOV 30H,A7.片内RAM 中有两个4 字节压缩的BCD 码形式存放的十进制数,一

相关文档
最新文档