汇编语言程序例题
汇编语言程序例题0001
【例】试编写一程序计算以下表达式的值。
w = (v- (x * y + z -540 )) /x式中x、y、z、v均为有符号字数据。
设x、y、z、v的值存放在字变量X、Y、Z、V中,结果存放在双字变量W之中,程序的流程图如图所示。
DATA SEGMENTX DW 200Y DW 100Z DW 3000V DW 10000W DW 2 DUP (?)DATA ENDSSTACK SEGMENT STACKDB 200 DUP (0)STACK ENDSCODESEGMENTASSUME DS DATA CS: CODE SS: STACKSTART MOV AX DATAMOV DS AX ; DATA>AXMOV AX XIMUL Y ; (X) * (DX AXMOV CX AXMOV BX,DX ;(DX AX)TBX:CX)MOV AX,ZCWD ;(Z)符号扩展ADD CX,AXADC BX,DX;(BX: CX)+( DX:AX)BX:CX)SUB CX,540SBB BX,0 ;( BX:CX) - 5 40~BX:CX)MOV AX,VCWD ;(V)符号扩展SUB AX,CXSBB DX,BX ;( DX:AX)-((BX CX DX: AX)IDIV X ;( DX:AX)/XMOV W,AX ;商5MOV W+2 DX ;余数D©W+2MOV AH,4CHINT 21HCODEENDS ;退出DOS 状态END START【例】已知某班学生的英语成绩按学号(从 1 开始)从小到大的顺序排列在要查的学生的学号放在变量NO中,查表结果放在变量ENGLISH中。
编写程序如下: STACK SEGMENT STACKDB 200 DUP(0)STACK ENDSDATA SEGMENTTAB DB 80 ,85,86,71,79,96DB 83 ,56,32,66,78,84NO DB 10ENGLIST DB ?DATA ENDSCODE SEGMENTASSUME DS: DATA,SS: STACK,CS: CODEBEGIN: MOV AX,DATAMOV DS,AXLEA BX,TABMOV AL,NODEL ALXLAT TABMOV ENGLIS,H ALMOV AH,4CHINT 21HCODEENDSTAB表中,END BEGIN【例】已知在内存中有一个字节单元NUM存有带符号数据,要求计算出它的绝对值后, 放入RESULT^元中。
单片机-汇编语言程序设计例题2
例 9 一个十六进制数存放在内部 RAM 的 HEX单元的 低 4 位中, 将其转换成ASCII码并送回 HEX单元。
十六进制 0~9的ASCII码为30H~39H, A~F的ASCII
码为41H~46H, ASCII码表格的首地址为ASCTAB。编程如
下:
ORG 1000H
HEXASC: MOV A, HEX ANL A, # 0FH ADD A, # 3; 修改指针
MOVC A, @A+PC
MOV HEX, A
RET
ASCTAB: DB 30H, 31H, 32H, 33H, 34H DB 35H, 36H, 37H, 38H, 39H DB 41H, 42H, 43H, 44H, 45H DB 46H
在这个程序中, 查表指令MOVC A, @A+PC到表格首 地址有两条指令, 占用 3 个字节地址空间, 故修改指针应加 3。
LOOP: MOV A, R3 MOV B, #10 MUL AB MOV R3, A ; (R3)×10 的低 8 位送R3 MOV A, B XCHA, R2 ; (R3)×10的高 8 位暂存R2 MOVB, #10
MUL AB ADD A, R2 MOV R2, A ; R2×10+( R3×10)高 8 位送R2 INC R0 ; 取下一个 BCD数 MOV A, R3 ADD A, @R0 MOV R3, A MOV A, R2 ADDC A, #0 ; 加低字节来的进位 MOV R2, A DJNZ R1, LOOP RET
例 15 在一个温度检测系统中, 温度模拟信号由 10 位A/D 输入。将A/D结果转换为对应温度值, 可采用查表方法实现。 先由实验测试出整个温度量程范围内的A/D转换结果, 把A/D 转换结果000H~3FFH所对应的温度值组织为一个表存储在 程序存储器中, 那么就可以根据检测到的模拟量的 A/D转换 值查找出相应的温度值。
_单片机-汇编语言程序设计例题 2
果存入 R2R3 中。
一个十进制数可表示为:
Dn×10n +Dn-1×10n-1 +… + D0×100
=(…((Dn×10+Dn-1)×10+Dn-2)×10+…)+D0
当n=3时, 上式可表示为:
((D3×10+D2)×10+D1)×10+D0
BCDHEX: MOV R0, #40H
; R0指向最高位地址
所谓查表法, 就是预先将满足一定精度要求的表示变量与 函数值之间关系的一张表求出, 然后把这张表存于单片机的程 序存储器中, 这时自变量值为单元地址, 相应的函数值为该地 址单元中的内容。查表, 就是根据变量 X在表格中查找对应的 函数值 Y, 使 Y=f(X)。
MCS - 51指令系统中, 有两条查表指令:
START: CLR C
MOV DPTR, #ST1 ; 第一个数的指针
MOVX A, @DPTR
MOV R2, A MOVX A, @DPTR CLR C
; 取第一个数
; 保存 ; 取第二个数
MOV DPTR, #ST2 ; 第二个数的指针
SUBB A, R2; 两数比较 JNC BIG2 ; 若第二个数大, 则转 XCH A, R2; 第一个数大 BIG1: MOV DPTR, #ST3
MOV21H, A
MOVA, 20H RLCA
MOV20H, A
MOVA, 21H ; 表首地址+偏移量 ADDC A, DPL MOVDPL, A
MOVA, 20H ADDC A, DPH MOVDPH, A CLR A MOVC A, @A+DPTR; 查表得温度值高位字节 MOV22H, A CLRA INCDPTR
汇编程序模拟题(有答案)
二、简答题(每小题4分,共12分) 1、在指令系统中,段内、段间返回均为RET指令。试回答: (1)执行段内返回RET指令时,执行的操作是: (2)执行段间返回RET指令时,执行的操作是: 2、ARY DW 10 DUP(?) ┇ MOV AL,TYPE ARY MOV BL,LENGTH ARY MOV CL,SIZE ARY 上述MOV指令序列执行后的结果是什么? AL=2、BL=10、CL=2*10=20
15、在汇编语言程序的开发过程中使用宏功能的顺序是(C)。 A、宏定义,宏调用 B、宏定义,宏展开 C、宏定义,宏调用,宏展开 D、宏定义,宏展开,宏调用 16、汇编语言源程序中,每个语句由四项组成,如语句要完成一定功能,那么该语句中不可省略的项是(B)。 A、名字项 B、操作项 C、操作数项 D、注释项 17、编写分支程序,在进行条件判断前,可用指令构成条件,其中不能形成条件的指令有(D)。 A、CMP B、SUB C、AND D、MOV 18、为使CX=-1时,转至MINUS而编制了指令序列,其中错误的序列是(C)。A、INC CX /JZ MINUS B、SUB CX,OFFFFH /JZ MINUS C、AND CX,OFFFFH/ JZ MINUS D、XOR CX,OFFFFH /JZ MINUS
4、DATA SEGMENT S9 DB 0,1,2,3,4,5,6,7,8,9 DATA ENDS ┇ LEA SI,S9 LEA,DI,S9+1 MOV CX,5 LOP:MOV AL,[SI] XCHG AL,[DI] MOV [SI],AL ADD SI,2 ADD DI,2 LOOP LOP 上述程序段运行后,S9开始的10个字节存储单元内容是什么?(1,0,3,2,5,4,7,6,9,8)
汇编语言程序设计练习题
汇编语言程序设计练习题汇编语言程序设计练习题1. 逆序输出字符串“BASED ADDRESSING”。
2. 从键盘上输入2个一位数,求出它们的和(假设和不超过1位)。
3. 试编写一段程序,要求在长度为100H字节的数组中,找出大于42H的无符号数的个数并存入字节单元UP中;找出小于42H的无符号数的个数并存入字节单元DOWN中。
4. 试编写一段程序,要求把键盘输入的小写字母用大写字母显示出来,其他字符保持不变。
5. 编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。
6. 编写程序,将一个包含有20个数据的数组M分成2个数组:正数数组P和负数数组N,并分别把这两个数组中数据的个数显示出来。
7. 试编写一段程序,求出首地址为DATA的100D字数组中的最小偶数,并把它存放在AX中。
8. 试编写一段程序,要求比较两个字符串string1和string2所含字符是否相等,如相等则显示“MATCH”, 若不相同则显示“NO MATCH”。
9. 试编写一段程序,从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数。
10. 从键盘上输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果。
11.有一个首地址为mem的100个字的数组,试编制程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零。
12.从键盘上输入一串字符(用回车键结束,使用10号功能调用。
)放在STRING中,试编制一个程序测试字符串中是否存在数字。
如有,则把CL的第5位置1,否则将该位清0。
13.在首地址为DATA的字数组中,存放了100H个16位补码数,试编写一个程序,求出它们的平均值放在AX寄存器中;并求出数组中有多少个数小于此平均值,将结果放在BX 寄存器中。
14. 已知数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。
试编制一个程序,把既在A中又在B中出现的整数存放于数组C中。
汇编语言程序例题
【例】试编写一程序计算以下表达式的值。
w=( v- (x * y +z -540 )) /x式中 x、y、z、 v 均为有符号字数据。
设x、y、z、v的值存放在字变量X、Y、Z、 V中,结果存放在双字变量W之中,程序的流程图以以下图。
DATA SEGMENTX DW 200Y DW 100Z DW 3000V DW 10000W DW 2 DUP(?)DATA ENDSSTACK SEGMENT STACKDB 200 DUP(0)STACK ENDSCODE SEGMENTMOV DS, AX;DATA→AXMOV AX, XIMUL Y;( X) * ( Y)→ DX: AXMOV CX, AXMOV BX, DX;(DX:AX)→(BX:CX)MOV AX, ZCWD;( Z)符号扩展ADD CX, AXADC BX, DX;( BX: CX) +( DX:AX)→( BX: CX)SUB CX, 540SBB BX, 0;(BX:CX)- 540→(BX:CX)MOV AX, VCWD;( V)符号扩展SUB AX, CXSBB DX, BXDX: AX);( DX: AX) - ( BX:CX)→(IDIV X;(DX:AX)/XMOV W, AX;商→WMOV W+2, DX ;余数 DX→W+2MOV AH, 4CHINT 21HCODE ENDS;退出DOS状态END START【例】已知某班学生的英语成绩按学号(从 1 开始)从小到大的次序排列在TAB表中,要查的学生的学号放在变量NO中,查表结果放在变量ENGLISH中。
编写程序以下:DB 83,56,32,66,78,84NO DB 10ENGLIST DB ?DATA ENDSCODE SEGMENTASSUME DS: DATA, SS: STACK, CS:CODEBEGIN: MOV AX, DATAMOV DS, AXLEA BX, TABMOV AL, NODEL ALXLAT TABMOV ENGLISH, ALMOV AH, 4CHINT 21HCODE ENDSEND BEGIN【例】已知在内存中有一个字节单元 NUM,存有带符号数据,要求计算出它的绝对值后,放入 RESULT单元中。
汇编语言典型例题
汇编语言典型例题汇编语言是一种底层的编程语言,它直接操作计算机硬件,并且与特定的计算机体系结构密切相关。
本文将介绍一些汇编语言的典型例题,帮助读者更好地理解和掌握这门编程语言。
例题一:计算两个数的和要求:编写一段汇编语言程序,计算两个32位有符号整数的和,并将结果存储在一个指定的寄存器中。
解决方案:```assemblysection .datanum1 dd 10num2 dd 20sum dd 0section .textglobal _start_start:mov eax, [num1]add eax, [num2]mov [sum], eax; 以下为输出结果的代码,具体实现方式与平台相关,这里不做详细展示...```例题二:判断一个数是否为负数要求:编写一段汇编语言程序,判断一个16位有符号整数是否为负数,如果是负数,则将其变为正数。
解决方案:```assemblysection .datanum dw -10section .textglobal _start_start:mov ax, [num]cmp ax, 0jnl positiveneg axpositive:; 此处可添加自定义逻辑,对正数进行处理; 以下为输出结果的代码...```例题三:字符串反转要求:编写一段汇编语言程序,将一个以0结尾的字符串进行反转,并输出反转后的字符串。
解决方案:```assemblysection .datastr db 'Hello, World!', 0len equ $ - strsection .textglobal _start_start:mov ecx, len - 1mov esi, 0mov edi, ecxreverse_loop:cmp esi, edijge print_reversemov al, [str+esi]mov ah, [str+edi]mov [str+esi], ahmov [str+edi], alinc esidec edijmp reverse_loopprint_reverse:; 以下为输出结果的代码...```通过以上例题的介绍,希望读者能对汇编语言的基本应用有一定的了解和掌握。
1!《汇编语言程序设计》试题
1!《汇编语⾔程序设计》试题《汇编语⾔程序设计》试题1.将8进制的数23转化为3进制的数,其值为(201)。
23(8)=2*8^1+3*8^0=19(10) 19(10)=201(3)2.汇编语⾔程序的开发过程要经历编辑、(汇编)、链接和运⾏调试等⼏个阶段。
3.Intel 8086 CPU中的段寄存器有CS、DS、ES和(SS)。
段寄存器CS、DS、ES、SS4.汇编语⾔指令中操作数分为⽴即数操作数、寄存器操作数和(内存操作数)三类。
5.永远指向堆栈段栈顶单元的寄存器为(SP)。
6. 英⽂⼤写字母A的ASCII码为41H,则英⽂⼤写字母D的ASCII码为(44H)。
A=41H B=42H C=43H D=44H...7. BCD码分为压缩的BCD码和(⾮压缩BCD码)两类。
8. 8086/8088CPU有(20)根地址线,可寻址1M字节的内存空间。
8086/8088CPU提供的地址总线有20位,2的20次⽅等于1M同理,寄存器是16位的,所以就是2的16次⽅等于64K9.80x86CPU有实模式和保护模式两种操作模式,⽽8086/8088CPU只能⼯作在(实)模式下。
10.(堆栈)是内存中的⼀块特定区域,其中的内容是按照后进先出的原则进⾏操作的。
11. 8086/8088CPU中变址寄存器有SI和(DI )两个。
12.主程序和⼦程序之间的参数传递通常有如下三种⽅法:通过寄存器传递、通过存储器传递和通过(堆栈)传递。
13.循环指令loop指令隐含的计数器是(CX )寄存器。
14. 已知8位⼆进制表⽰的整数X的补码为10011011,则-X的补码的⼆进制编码为(01100101)。
先各位取反,0变成1,1变成0。
然后最低位加⼀。
例⼦11111111,0011100;X=10011011 -X=01100101 -2X=(-X左移⼀位补零,多的那位忽略)11001010;1/2 X=11001101(看X,右移⼀位原来第⼀位是什么现在还是什么) ;-1/2X=00110010(同理,看-X)15.有如下定义:BUF DW 4,6,$+2,若汇编时BUF分配的偏移地址是0042H,则汇编后BUF数组中第三个字的值是(0048h)。
汇编语言程序设计例题
汇编语言程序设计例题1.利用查表的方法计算S=X2+Y2,设0<=X<=15,0<=Y<=15,且分别在DAX,DAY字节单元存放,结果存入RLT单元。
DATA SEGMENTTAB DB0,1,4,9,16,25,36,49,64,81DB100,121,144,169,196,255DAX DB10DAY DB11RLT DW?DATA ENDSSTACK SEGMENTSTACK DB200DUP(0)STACK ENDSCSEG SEGMENTASSUME DS:DATA,SS:STACK,CS:CSEGSTART:MOV AX,DATAMOV DS,AXMOV AL,DAXLEA BX,TABXLATMOV AH,0MOV RLT,AXMOV AX,DAYXLATMOV AH,0ADD RLT,AXMOV AH,4CHINT21HCSEG ENDSEND STACK2.已知三个无符号数a,b,c,存放在ADR开始的连续单元,编制完成下列操作的程序:若a,b,c同时为偶数,将FLAG单元置1,若同时为奇数,FLAG单元置0,否则FLAG单元置全1。
SSEG SEGMENTSTK DB20DUP(0)SSEG ENDSDSEG SEGMENTADR DB9EH,4DH,5FHFLAG DB?DSEG ENDSCSEG SEGMENTASSUME SS:SSEG,DS:DSEGASSUME CS:CSEGSTART:MOV AX,DSEGMOV DS,AXMOV AX,SSEGMOV SS,AXMOV FLAG,0MOV AL,ADRSHR AL,1JC L1INC FLAGL1:MOV AL,ADR+1SHR AL,1JC L2INC FLAGL2:MOV AL,ADR+2SHR AL,1JC L3INC FLAGCMP FLAG,0JE L3CPM FLAG,3JE L4MOV FLAG,-1JMP L5L3:MOV FLAG,0JMP L5L4:MOV FLAG,1L5:MOV AH,4CHINT21HCSEG ENDSEND START3.已知内存DATA开始的存储区存放若干个字节数据,数据个数在COUNT单元中存放。
《汇编语言程序设计》考试练习题及答案
《汇编语言程序设计》考试练习题及答案一、单选题1. 计算机中存取信息或数据的最小单位为()A 、位B 、字节C 、字D 、双字答案:B2. 调用子程序的指令为()A 、CALLB 、RETC 、HLTD 、NOP答案:A3. DOS功能调用是通过()指令去调用DOS系统提供的软件中断处理程序A 、INT 21HB 、INT 23HC 、INT 12HD 、INT 11H答案:A4. 满足()时,CPU允许中断A 、IF=0B 、IF=1C 、DF=0D 、DF=1答案:B5. 完成对CL寄存器的内容乘以4的正确操作是()。
A 、ROL CL,1 ROL CL, 1B 、MUL 4C 、SHL CL, 1 SHL CL, 1D 、MOV CL , 2 SHL CL, CL答案:C6. 下面寄存器中可以分为两个独立8位寄存器的是()A 、AXB 、DIC 、CSD 、SI答案:A7. ()是用二进制编码的机器指令的集合及一组使用机器指令的规则,是CPU能直接识别的唯一语言。
A 、汇编语言B 、机器语言C 、JAVA语言D 、C语言答案:B8. 源程序模块结束语句为()A 、ORGB 、ENDC 、SEGMENTD 、START答案:B9. 8位补码表示的有符号数的表示范围是()A 、0~255B 、-128~+127C 、0~65535D 、-32768~+32767答案:B10. 在一段汇编程序中多次调用另一段程序,用宏指令比用子程序实现起来,下列说法正确的是()A 、占内存空间小,但速度慢B 、占内存空间大,但速度快C 、占内存空间相同,但速度快D 、占内存空间相同,但速度慢答案:B11. 与LEABX ,BUF指令完全等效的指令是()。
A 、MOV BX ,BUFB 、LDS BX ,BUFC 、MOV BX ,OFFSET BUFD 、MOV BX ,WORD PTR BUF答案:C12. 14的非压缩BCD码为()A 、00010100B 、01000001C 、0000000000010100D 、0000000100000100答案:D13. 要实现使BETA的值为56,应采用的语句是()A 、BETA DB 56B 、BETA DB 56HC 、BETA EQU 56HD 、BETA EQU 56答案:D14. ()不可以做目的操作数A 、立即数B 、寄存器C 、存储器操作数D 、累加器答案:A15. 计算机一般由中央处理器、存储器和输入/输出子系统组成,其中()可以存放程序、数据、信息及中间结果。
汇编语言test1
汇编语⾔test1汇编语⾔1⼀、简答题1.下⾯程序段执⾏后,寄存器BX的值发⽣什么变化?(不考虑溢出)SAL BX,1PUSH BXMOV CL,4SAL BX,CLPOP CXSUB BX,CX乘以 30d2.对于这样的程序段:CMP AX,BXJGE NEXTXCHG AX,BXNEXT: CMP AX,CXJGE DONEXCHG AX,CXDONE: ┆试回答:①上述程序执⾏后,原有AX,BX,CX中最⼤数存放在哪个寄存器?AX②这三个数是带符号数还是⽆符号数?G,所以是有符号数3.已知寄存器(DS)=1000H,(SS)=1110H,(BX)=100H,(BP)=100H,(SI)=0002H,(SP)=100H;内存单元中的(10100H)=12H,(10101H)=34H,(10102H)=56H,(10103H)=78H,(11200H)=0ABH,(11201H)=0CDH,(11202H)=0EFH,(11203H)=0D3H。
试说明下列各指令执⾏完后AX寄存器的内容。
指令(写个思路,其他⾃⼰搞) AX的内容① MOV AX,1200H ① 1200(直接给)② MOV AX,BX ② 0100h③ MOV AX,[1200H] ds:1200(10000+1200=11200)③所以读(11201和11200内容)0CDABH④ MOV AX,[B P] BP:找SS:bp 11100+100=11200同理读11201和11200内容⑤ MOV AX,1100H[BX] [BX]:找 ds:1100+bx ⑤⑥ MOV AX,[BX][SI] ds:bx+si ⑥⑦ MOV AX,1100H[BX][SI] ds:bx+si+1100 ⑦⑧ POP AX ss:sp⑧4. A DB 0F8HB DB 3 DUP(?)┇LEA DI,BMOV CX,3MOV AL,ALOP:SAR AL,1MOV [DI],ALINC DILOOP LOPOFCH OFEH OFFH上述程序段运⾏后,从B单元开始依次存放的数据是多少?5.执⾏下⾯的程序段后,AX和BX寄存器的内容各是多少?MOV AX,1MOV BX,23MOV SI,10XCHG AX,BXMUL SIADD BX,AXAX=230 BX=231⼆、程序填空题下⾯是⼀个.com⽂件格式的程序,完成从键盘上输⼊⼀个4位以内的16进制数,并以10进制形式显⽰出来。
汇编语言程序设计练习题及答案
一、单项选择题(在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。
)1.为在一连续的存储单元中,依次存放数据41H,42H,43H,44H,45H,46H,可选用的数据定义语句是(D)A.DB 41,42,43,44,45,46 B.DW 4142H,4344H,4546HC.DW ‘AB’,‘CD’,‘EF’D.DW ‘BA’,‘DC’,‘FE’2.DA2 DB‘AB’,‘CD’┇MOV AX,WORD PTR DA2+1上述语句执行后AX中的值是(D)A.‘AD’B.‘BC’C.‘DA’D.‘CB’3.下列数据定义语句中可实现留空20H个字节存储单元的是(D)A.DB 20 DUP(?) B.DW 20H DUP(?)C.DB 10H DUP(4 DUP(?)) D.DD 08H DUP(?)4.如某存储器分段时,表示偏移地址是17位二进制代码,那么一个段最多的存储单元数是(D)A.32K字节B.32K字C.64K字节D.64K字5.下列寄存器中用来指示堆栈中任意数据区的偏移地址的是(B)A.BX B.BPC.SI D.DI6.下列指令中有语法错误的是(C)A.PUSH AX B.PUSH [20H+SI+BX]C.POP CS D.PUSH CS7.执行PUSH BP指令时,目的操作数的物理地址表达式是(D)A.16*SS+BP B.16*DS+BPC.16*CS+IP D.16*SS+SP8.把BL中的数据输出到端口8CH中正确指令是(C)A.OUT 8CH,BL B.IN 8CH,BLC.MOV AL,BL D.MOV AL,BLOUT 8CH,AL IN 8CH,AL9.结果为零的条件转移指令,其测试条件是(A)A.ZF=1 B.ZF=0C.SF=l D.SF=010.下面程序段完成测试DA-BYTE字节单元中数是否为负数,若是则将全l送DH中,否则全0送DH中,那么程序段中方框里应填的语句是MOV CH,0MOV CH,0FFHZERO:MOV DH,CH(C)A.JNZ ZERO B.JS ZEROC.JZ ZERO D.JC ZERO11.汇编源程序时,出现语法错误的语句是(C)A.MOV [BX+SI],BX B.MOV CL,[BP+DI]C.MOV CS,AX D.MOV DS,AX12.设SP初值为3050H,执行指令PUSH BX后,SP的值是(B)A.304FH B.304EHC.3048H D.3049H13.串操作指令中,每次操作后使SI/DI为减量应设置(C)A.DF=0 B.TF=1C.DF=1 D.TF=014.设AL=57H,BL=24H,执行指令SUB AL,BL后,寄存器内容为(B)A.AL=57H,BL=24H B.AL=33H,BL=24HC.AL=57H,BL=33H D.AL=33H,BL=015. 当执行ADD AX ,BX 指令后,若AX的内容为4E52H 时,设置的奇偶标志位PF=0 ,下面的叙述正确的是( A)A. 表示结果中含 1 的个数是奇数B. 表示结果中含1 的个数是偶数C. 表示该数是奇数D. 表示结果中低8 位中含1 的个数是奇数16. 设物理地址(21000H)=20H, (21001H)=30H,(21002H)=40H 。
汇编语言程序设计例子
汇编语言程序设计例子汇编语言程序设计典型案例一顺序程序设计例:从键盘输入两个数字(0-9)输出它们积。
(X1 已验证) P41CODE SEGMENTASSUME CS:CODEORG 100HMain:MOV AH,1INT 21HMOV BL,ALMOV AH,2MOV DL,0DHINT 21HMOV DL,0AHINT 21HMOV AH,1INT 21HSUB AL,30HSUB BL,30HMUL BLMOV BL,10DIV BLADD AX,3030HMOV BX,AXMOV AH,2MOV DL,0DHINT 21HMOV DL,0AHINT 21HMOV DL,BLMOV AH,2INT 21HMOV AH,2MOV DL,0DHINT 21HMOV DL,0AHINT 21HMOV DL,BHMOV AH,2INT 21HMOV AH,4CHINT 21HCODE ENDSEND Main二分支程序1 简单分支例:已知AX中放有一个16位无符号数,BL中放有一个8位无符号数,1P50编写将它们相加结果放DX的程序。
2 两路分支例:编写将BX与DX中较大的一个无符号数放入AX中的程序。
( X2 已验证) 1P51DATA SEGMENTBUF1 DW ?,?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA SI,BUF1MOV BX,[SI]INC SIMOV DX,[SI]CMP BX,DXJA Lab1MOV AX,DXJMP Lab2Lab1:MOV AX,BXLab2:MOV AH,4CHINT 21HCODE ENDSEND START3 复杂条件的分支例子:从键盘读入两个一位数,并输出其积。
P52(X1 已验证)CODE SEGMENTASSUME CS:CODEORG 100HMOV AH,1;从键盘读第一个数INT 21HCMP AL,'0'JB Lab1CMP AL,'9'JA Lab1MOV BL,ALMOV AH,2MOV DL,13HINT 21HMOV DL,10HINT 21HMOV AH,1; 从键盘读第二个数INT 21HCMP AL,'0'JB Lab1CMP AL,'9'JA Lab1SUB AL,30H ;把后读入的数的ASCALL码还原为数字SUB BL,30H ;把先读入的数的ASCALL码还原为数字MUL BL ;两数相MOV BL,10 ;DIV BL ;分拆积的十位和个位ADD AX,3030H ;积转换为ASCALL码MOV BX,AXMOV AH,2MOV DL,13H ;回车INT 21HMOV DL,10H ;换行INT 21HMOV DL,BL;输出显示十位MOV AH,2INT 21HMOV DL,BH;输出显示个位INT 21HJMP Lab2Lab1:MOV AH,2MOV DL,'E'INT 21HLab2:MOV AH,4CHINT 21HCODE ENDSEND4 多路分支例3 从键盘上接收按键输入,如果按下的是小写字母则输出‘L’,是大写字母则输出‘U’,如果是数字则输出‘N‘,都不是则输出‘*’。
汇编语言程序设计练习题及参考答案
一、单项选择题从每小题的四个备选答案中,选出一个正确答案,并将正确答案的番号填人括号内。
1.用来存放下一条将要执行的指令地址的寄存器是(B)A.SP B.IP C.BP D.CS2.要使串处理从低地址向高地址进行,应把标志位置为(D)A.IF=1B.TF=0C.DF=1D.DF=03.使状态标志位CF清零的错误指令是(C)A.OR AX,AX B.SUB AX,AXC.MOV CF,0D.CLC4.设SP=1110H,执行PUSH AX指令后,SP的内容为(B)A.SP=1112H B.SP=110EHC.SP=1111H D.SP=110FH5.汇编源程序出现语法错误的指令有(D)A.MOV[BX+SI],AL B.MOV AX,[BP+DI]C.MOV DS,AX D.MOV CS,AX6.下列串操作指令中,必须同时指明源串和目的串地址的指令是(D)A.STOSW B.LODSWC.SCASW D.CMPSW7.设BL中有一无符号数,实现把BL中的数乘以2,应选用的指令是(B)A.SHR BL,1B.SHL BL,1C.SAR BL,1D.RCR BL,18.执行PUSH AX指令的正确步骤是(A)A.1.SP←SP-1,(SP)←AH B.1.(SP)←AH,SP←SP-12.SP←SP-1,(SP)←AL2.(SP)←AL,SP←SP-1C.1.SP←SP+1,(SP)←AH D.1.(SP)←AH,SP←SP+12.SP←SP+1,(SP)←AL2.(SP)←AL,SP←SP+19.CF=1时转移到目标地址的条件转移指令是(B)A.JNC B.JC C.JZ D.JS10.在执行NEG指令时,对标志位CF有影响,其影响的规则是(C)A.对正数求补时,CF=0B.对负数求补时,CF=0C.对非零数求补时,CF=1D.对零求补时,CF=111.算术右移SAR和逻辑右移SHR两条指令执行后结果完全相同的情况是(A)A.目的操作数最高位为0B.目的操作数最高位为1C.目的操作数为任意情况D.无论什么情况都不可能相同12.设AL=04H,BL=0F8H,执行IMUL BL指令后,结果是(D)A.AX=0032H B.AX=00E0HC.AX=03E0H D.AX=0FFE0H13.指令的操作数中,允许出现表达式,例如BUF1与BUF2均为变量名,下面指令中语法正确的是(D)A.MOV AX,BUFl*BUF2B.MOV AX,BUF1/BUF2C.MOV AX,BUF1+ES:BUF2D.MOV AX,BUF2-BUF114.下面指令中,操作数的寻址方式为寄存器间接寻址的指令是(C )A.INC WORD PTR [BX+SI]B.INC CX,[SI+COUNT]C.NEG BYTE PTR [BX]D.ADD AX,B15.NUM EQU 80HDA DB 34HAND DA,NUM上述语句执行后,DA 中的内容是(D )A.0B4H B.80H C.34H D.016.直接、间接、立即三种寻址方式指令的执行速度,由快至慢的排序为(A )A.立即、直接、间接B.直接、间接、立即C.直接、立即、间接D.不一定17.语句DA1DB 2DUP(3,5,7)汇编后,该语句可等同于的语句是(D )A.DA1DB 3,5,7B.DA1DB 2,3,5,7C.DA1DB 3,5,7,2D.DA1DB 3,5,7,3,5,718.MOV AL,80HMOV CL,2SAR AL,CL上述指令序列执行后,结果是(D )A.AL=40H B.AL=20HC.AL=0C0H D.AL=0E0H19.下面是实现将AL 内容加1的压缩型BCD 码加法程序段,其中正确的指令序列是(A )A.INC AL B.ADD AL,1DAA DASC.ADD AL,1D.STCDAA AAA20.现有数据存储如图所示:30100H 30101H 30102H 30103H 设AL=01H,BX=0100H,DS=3000H 执行换码指令XLAT 后正确的结果是(B )A.AL=20H B.AL=38HC.AL=00H D.AL=41H21.若定义DAT DW 'A',则(DAT)和(DAT+1)两个相邻的内存中存放的数据是(B )A.0041H B.4100H 20H38H41H55HC.xx41H D.41xxH[注]选项C.和D.中的XX表示任意数据。
汇编语言程序题
例1:设内存单元DATA存放一字节无符号数,编程将其拆成两位十六进制数,并存入HEX、HEX+1的低四位。
HEX单元存放低位十六进制数,HEX+1单元存放高位十六进制数。
思路:屏蔽,移位DSEG SEGMENTDATA DB 8AHHEX DB 0,0DSEG ENDSsseg segment stackdb 100 dup(0)sseg endsCSEG SEGMENTASSUME CS:CSEG,DS:DSEG,ss:ssegSTART:MOV AX,DSEGMOV DS,AXMOV AL,DATAMOV AH,ALAND AL,0FHMOV HEX,ALAND AH,0F0HMOV CL,4SHR AH,CLMOV HEX+1,AHmov ah,4chint 21hCSEG ENDSEND START例3:利用查表的方法将1位十六进制数转换成它对应的ASCII码。
思路:查表代替数据运算DSEG SEGMENTTABLE DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,41H,42H,43H,44H.45H,46HHEX DB 4ASCII DB ?DSEG ENDSsseg segment stackdb 100 dup(0)sseg endsCSEG SEGMENTASSUME CS:CSEG,DS:DSEG,ss:ssegSTART:MOV AX,DSEGMOV DS,AXMOV BX,OFFSET TABLEMOV AL,HEXMOV AH,0ADD BX,AX MOV AL,[BX] mov ah,4ch int 21hCSEG ENDSEND START例1、计算100010xy xx>⎧⎪= =⎨⎪- <⎩设X为单字节带符号整数,且存于DATA1单元,计算结果Y 存于DATA2单元。
DSEG SEGMENTDATA1 DB 45DATA2 DB ?DSEG ENDSsseg segment stack db 100 dup(0)sseg endsCSEG SEGMENTASSUME CS:CSEG,DS:DSEG,ss:ssegSTART: MOV AX,DSEGMOV DS,AXMOV AL,DATA1CMP AL ,0JGE BIGMOV AL,0FFHJMP DONEBIG: JE DONEMOV AL,1DONE:MOV DATA2,ALmov ah,4chint 21hCSEG ENDSEND START例2、设内存中有三个互不相等的无符号字数据,分别存放在DATA开始的字单元中,编程将其中最小值存入MIN单元。
汇编语言程序设计习题及答案
习题一1.1 把下列2、8、16进制数转换成为十进制数(1)(1011011)2(2)(0.10110)2(3)(111111.01)2(4)(1000001.11)2(5)(377)8(6)(0.24)8(7)(3FF)16(8)(2A.4)16解:(1)(1011011)2=64+16+8+2+1=91另解:原式=(5B)16=5×16+11=91(2)(0.10110)2=0.5+0.125+0.0625=0.6875(3)(111111.01)2=32+16+8+4+2+1+0.25=63.25另解:原式=(1000000-1+0.01)2=64-1+0.25=63.25(4)(1000001.11)2=64+1+0.5+0.25=65.75(5)(377)8=3×64+7×8+7=255另解:原式=(400-1)8=4×64-1=255(6)(0.24)8=2×0.125+4×0.015625=0.3125(7)(3FF)16=3×256+15×16+15=1023另解:原式=(400-1)16=4×256-1=1023(8)(2A.4)16=2×16+10+4×0.0625=42.25另解:原式=2×16+10+4÷16=42.251.2 把下列十进制数转换为2、16进制数(1)(127)10(2)(33)10(3)(0.3)10(4)(0.625)10(5)(1023.5)10(6)(377)10(7)(1/1024)10(8)(377/32)10解:(1)(127)10 =64+32+16+8+4+2+1= (111 1111)2=(7F)16另解:原式=(128-1)10=(1000 0000-1)2=(111 1111)2=(7F)16(2)(33)10 =32+1= (10 0001)2=(21)16(3)(0.3)10 = (0.0100 1100 1……)2=(0.4CCC……)16(4)(0.625)10= 0.5+0.125=(0.101)2=(0.A)16(5)(1023.5)10 = 512+256+128+64+32+16+8+4+2+1+0.5=(11 1111 1111.1)2=(3FF.8)16(6)(377)10 =256+64+32+16+8+1=(1 0111 1001)2=(179)16(7)(1/1024)10=(0.0000 0000 01)2=(0.004)16(8)(377/32)10=(256+64+32+16+8+1)÷(32)=(101111001)2÷(100000)2=(1011.11001)2=(0B.C1)161.3 把下列二进制数转换为十六进制数(1)(100011)2(2)(0.11101)2(3)(11111.11)2(4)(0.00101)2解:(1)(100011)2=(10’0011)2=23H(2)(0.11101)2=(0.1110’1000)2=0.E8H(3)(11111.11)2=(1’1111.1100)2=1F.CH(4)(0.00101)2=(0.0010’1000)2=0.28H1.4 把下列十六进制数转换为二进制数(1)(3B6)16(2)(100)16(3)(80.2)16(4)(2FF.A)16解:(1)(3B6)16 =(0011 1011 0110)2(2)(100)16 =(0001 0000 0000)2(3)(80.2)16 =(1000 0000.0010)2(4)(2FF.A)16 =(0010 1111 1111.1010)21.5 如果用24b储存一个无符号数,这个数的范围是什么?如果储存的是一个补码表示的有符号数,那么这个数的范围又是什么?答:如果用24b储存一个无符号数,这个数的范围应为:0~224-1如果用24b储存一个补码表示的有符号数,这个数的范围应为:-223~+223-11.6 两个无符号数,它们的大小等于十进制数210和303,用N位二进制存储时,相加产生了进位,用N+1位二进制存储时,相加没有产生进位。
汇编语言例题
典型例题(与考试题型,考试范围相近)1.应用程序具有3个基本段,可执行指令应该保存于( A )。
A) 代码段B) 数据段C) 堆栈段D) 附加段2. 8位补码F3H要扩展成16位补码应该是( D ),这样其真值才不变。
A) F0F3H B) 00F3H C) 10F3H D) FFF3H3. “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) FAR6. 在Windows控制台环境,在当前光标显示信息应该使用( B )函数(功能)。
A) ReadConsole B) WriteConsoleC) MessageBox D) GetStdHandle7.汇编语言源程序经汇编后不能直接生成( 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,110.假定esp=00120100h,eax=1f6c2107h,执行指令push ax后,存放数据07h的物理地址是( C )。
A) 00120104h B) 00120101h C) 001200fch D) 001200ffh11.下列对标志寄存器中标志位产生影响的指令是( B )A) jmp done B) shl eax, 2C) call subp D) not eax12. 假设CL=98H, 执行“MOVSX DX, CL”后,DX=( D )A) F098H B) 0098H C) 1098H D) FF98H13. “mov 80h[esi], eax”指令的目的操作数采用( C )寻址方式。
第3章 汇编语言程序设计_例题_01
第三章
.code .startup mov bx,offset ASCII ;BX指向ASCII码表 mov al,hex ;AL取得一位16进制数,正是ASCII码表中位移 and al,0fh ;只有低4位是有效的,高4位清0 xlat ;换码:AL←DS:[BX+AL] mov dl,al ;入口参数:DL←AL mov ah,2 ;02号DOS功能调用 int 21h ;显示一个ASCII码字符 .exit 0 end
第三章
;计算AX的绝对值 cmp ax,0 jns nonneg ;分支条件:AX≥0 neg ax ;条件不满足,求补 nonneg: mov result,ax ;条件满足
;计算AX的绝对值 cmp ax,0 jl yesneg ;分支条件:AX<0 jmp nonneg yesneg: neg ax ;条件不满足,求补 nonneg: mov result,ax ;条件满足
第三章
子程序的常见格式
subname proc ;具有缺省属性的subname过程 push ax ;保护寄存器:顺序压入堆栈 push bx ;ax/bx/cx仅是示例 push cx … ;过程体 pop cx ;恢复寄存器:逆序弹出堆栈 pop bx pop ax ret ;过程返回 subname endp ;过程结束
第三章
dec ax shl ax,1 ;等效于add ax,ax mov bx,ax jmp table[bx] ;(段内)间接转移:IP←[table+bx] start2: mov ah,9 int 21h .exit 0 disp1: mov dx,offset msg1 ;处理程序1 jmp start2 ...
第三章
高校计算机专业汇编语言程序设计练习题
高校计算机专业汇编语言程序设计练习题1. 程序题一:编写一个汇编程序,实现将前n个自然数的和存储在寄存器AX中。
要求通过键盘输入n的值,并将计算结果输出到屏幕上。
程序思路如下:- 读取键盘输入的n值,存储到内存变量n_value中。
- 使用循环将前n个自然数求和,计算结果存储到寄存器AX中。
- 将寄存器AX中的结果输出到屏幕上。
2. 程序题二:编写一个汇编程序,实现求一个正整数的二进制表示中1的个数。
要求通过键盘输入一个正整数,并将结果输出到屏幕上。
程序思路如下:- 读取键盘输入的正整数值,存储到内存变量num中。
- 使用循环和位运算的方式,统计num的二进制表示中1的个数。
- 将得到的1的个数结果输出到屏幕上。
3. 程序题三:编写一个汇编程序,实现对一个已经存储在内存中的字符串进行反转。
要求将反转后的字符串输出到屏幕上。
程序思路如下:- 将待反转的字符串存储到内存变量str中。
- 使用循环和栈操作的方式,对字符串进行反转。
- 将反转后的字符串输出到屏幕上。
4. 程序题四:编写一个汇编程序,实现对一个已经存储在内存中的数组进行排序。
要求将排序后的数组输出到屏幕上。
程序思路如下:- 将待排序的数组存储到内存变量array中。
- 使用循环和比较交换的方式,对数组进行排序。
- 将排序后的数组输出到屏幕上。
5. 程序题五:编写一个汇编程序,实现求一个已经存储在内存中的数组中的最大值。
要求将最大值输出到屏幕上。
程序思路如下:- 将待求最大值的数组存储到内存变量array中。
- 使用循环和比较的方式,找到数组中的最大值。
- 将最大值输出到屏幕上。
以上是五道高校计算机专业汇编语言程序设计的练习题,希望能够帮助你提升汇编语言编程的能力。
完成这些练习题可以加深对汇编语言程序设计的理解和熟练程度,同时提升解决实际问题的能力。
如果你能够自行尝试解答并编写相应的程序,将会获得更好的学习效果。
祝你在汇编语言程序设计的学习中取得进步!。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
END START
;汇编结束
【例】试编一程序,求三个带符号字数据中的最大值,并将最大值存入
MAX字单元中。
设三个带符号数分别在三个字变量 X、 Y、 Z 中存储。程序流程图如下图所示
STACK SEGMENT STACK
DB 200 DUP
( 0)
STACK ENDS
DATA SEGMENT
X
DW 00ABH
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:MOVBL,0 ; 0 送 BL
EXIT: MOV Y,BL ;BL 中内容送 Y 单元
MOV AH,4CH
INT 21H CODE ENDS
;程序结束
【例】试编写一程序计算以下表达式的值。 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,Hale Waihona Puke CS:CODE, SS: STACK
START: MOV AX, DATA
MOV DS, AX
Y
DW
–5
Z
DW 200
MAX DW ?
DATA ENDS
CODE SEGMENT
ASSUME DS: DATA,SS: STACK, CS:CODE
START: MOV AX, DATA
MOV DS, AX
MOV AX, X
CMP AX
, Y ;X> Y?
JG L1
MOV AX
, Y ;Y> Z?
题目分析:根据数学中绝对值的概念知道,一个正数的绝对值是它本身,而一个负数的
绝对值是它的相反数;要计算一个数的相反数,需要完成减法运算,即用
0 减去这个数。
8086/8088 指令系统中有专门的求相反数的指令 NEG。
DATA SEGMENT
X DB -25
RESULT DB ?
DATA ENDS
CODE SEGMENT
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 MOV W, AX
;( DX: AX) /X ;商→W
BEGIN: MOV AX, DATA
MOV DS, AX
LEA BX, TAB
MOV AL, NO
DEL AL
XLAT TAB
MOV ENGLIS,H AL
MOV AH, 4CH INT 21H
CODE ENDS
END BEGIN
【例】 已知在内存中有一个字节单元 放入 RESULT单元中。
NUM,存有带符号数据, 要求计算出它的绝对值后,
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 START
【例】编写计算下面函数值的程序:
1 X>0
Y= 0 X=0
-1 X<0
设输入数据为 X、输出数据 Y,且皆为字节变量。程序流程图如下图所示。
DATA SEGMENT
X DB -25
Y DB ?
DATA ENDS
CODE SEGMENT
;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)
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
MOV W+,2 DX ;余数 DX→W+2
MOV AH, 4CH
INT 21H
CODE ENDS
;退出 DOS 状态
END START
【例】已知某班学生的英语成绩按学号(从
1 开始)从小到大的顺序排列在 TAB表中,
要查的学生的学号放在变量 NO中,查表结果放在变量 ENGLISH中。编写程序如下:
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
CMP AX
,Z
JG EXIT
L2:
MOV AX, Z JMP EXIT
L1:
CMP
AX, Z ;X> Z?
JLE
L2
EXIT: MOV MAX, AX
MOV
AH, 4CH
INT
21H
CODE ENDS
END START
【例】 设某程序有 8 路分支,试根据给定的
支。
程序流程如图下所示。
N 值( 1~8),将程序的执行转移到其中的一路分