汇编语言程序例题
- 格式:docx
- 大小:246.72 KB
- 文档页数:13
【例】试编写一程序计算以下表达式的值。
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^元中。
【例】试编写一程序计算以下表达式的值。
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.将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. 计算机一般由中央处理器、存储器和输入/输出子系统组成,其中()可以存放程序、数据、信息及中间结果。