汇编语言程序设计基础 习题.pdf

上传人:赵** 文档编号:69180612 上传时间:2022-12-31 格式:PDF 页数:10 大小:464.29KB
返回 下载 相关 举报
汇编语言程序设计基础 习题.pdf_第1页
第1页 / 共10页
汇编语言程序设计基础 习题.pdf_第2页
第2页 / 共10页
点击查看更多>>
资源描述

《汇编语言程序设计基础 习题.pdf》由会员分享,可在线阅读,更多相关《汇编语言程序设计基础 习题.pdf(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!1/10 第 5 章 汇编语言程序设计 1.下列标号为什么是非法的?(1)GET.DATA (2)1_NUM (3)TEST-DATA(4)RET (5)NEW ITEM 答案:(1)因为.只允许是标号的第一个字符(2)第一个字符不能为数字 (3)不允许出现-(4)不能是保留字,如助记符 (5)不能有空格 2.下面的数据项定义了多少个字节?DATA_1 DB 6 DUP(4 DUP(0FFH,89H)答案:48 字节 3.下面两个数据段中偏移地址为10H和11H的两个存储单元中的数据是一样的吗?为什么

2、?DTSEG SEGMENT ORG 10H DATA1 DB 72H DB 04H DTSEG ENDS DTSEG SEGMENT ORG 10H DATA1 DW 7204H DTSEG ENDS 答案:不一样。分别是 72H,04H 和 04H,72H。存储字时低 8 位存在低字节,高 8 位存在高字节。4.下面的数据项设置了多少个字节?(1)ASC_DATA DB 1234 (2)HEX_DATA DB 12 H,34H 答案:(1)设置了 4 个字节 (2)设置了 2 个字节 5判断以下说法是否正确,如有错,请说明原因并改正。(1)伪指令在汇编过程中不会产生二进制代码。(2)宏和过

3、程的相同之处是都可用于简化源程序书写、精简目标代码。(3)在计算机中,高级语言通常需要转换为汇编语言后才能执行。(4)汇编语言程序上机一般包括编辑、汇编、链接和调试几个步骤。答:(1)正确。(2)错误。宏不能精简目标代码。(3)错误。高级语言程序经编译或解释后直接转换为目标代码。(4)正确。6已知数据和符号定义 A1 DB?A2 DB 8 K1 EQU 100 判断下列指令的正误,并说明错误指令的原因。(1)MOV K1,AX(2)MOV A2,AH (3)CMP A1,A2 (4)MOV BX,K1 MOV BX,DX(5)K1 EQU 200 欢迎您阅读并下载本文档,本文档来源于互联网,如

4、有侵权请联系删除!我们将竭诚为您提供优质的文档!2/10 答:(1)错。K1 是符号常数,在此处相当于立即数 100,故不能做目的操作数。(2)正确。(3)错。A1、A2 都是字节变量,相当于两个存储器单元,故不能同时出现在一条指令中直接进行比较。(4)正确。(5)错。用 EQU 定义的符号不能重新赋值,除非已用 PURGE 解除了原值。7若数据段中有定义 NUM1 EQU 23H NUM2 DW 0 则指令 MOV NUM2,NUM1 的源、目操作数的寻址方式以及指令执行后 NUM21单元的内容分别是什么?答:指令 MOV NUM2,NUM1 的源操作数使用立即数寻址,目的操作数使用直接寻址

5、。指令执行后 NUM21 单元的内容是 0。8已知某数据段从物理地址 03000H 处开始,定义如下:DSEG SEGMENT ORG 2000H A1 DD 2 DUP(7,1,?)A2 DB 10 DUP(0,4,3 DUP(2),5)CNT EQU 20H A3 DW 100 DUP(?)DSEG ENDS 请分别用分析运算符 SEG、OFFSET、LENGTH、SIZE、TYPE 求出 A1、A2、A3 的段基址、偏移量、类型及它们的 LENGTH、SIZE。答:(SEG A1)=0300H,(OFFSET A1)=2000H,(TYPE A1)=4,(LENGTH A1)=2,(SI

6、ZE A1)=24=8;(SEG A2)=0300H,(OFFSET A2)=2018H,(TYPE A2)=1,(LENGTH A2)=10,(SIZE A2)=101=60;(SEG A3)=0300H,(OFFSET A3)=2054H,(TYPE A3)=2,(LENGTH A3)=100,(SIZE A3)=1002=200 9已知符号定义语句如下:ALPHA EQU 100 BETA EQU 25 GAMMA EQU 2 分别求下列各表达式的值。(1)ALPHA*4 GT BETA (2)ALPHA MOD GAMMABETA(3)(BETA/3)LE 5 (4)ALPHA AND

7、 BETA (5)GAMMA XOR(BETA EQ 25)答案:(1)ALPHA*4 GT BETA =100*4 GT 25 =0FFFFH(2)ALPHA MOD GAMMABETA =100 MOD 225 =25(3)(BETA/3)LE 5 =(25/3)LE 5 =0 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!3/10(4)ALPHA AND BETA =100 AND 25 =64H&19H =0(5)GAMMA XOR(BETA EQ 25)=2(25 EQ 25)=0FFFDH 10根据下列要求编写一个汇编语言程序:1)代

8、码段的段名为 COD_SG 2)数据段的段名为 DAT_SG 3)堆栈段的段名为 STK_SG 4)变量 D1 所包含的数据为 95 5)将变量 D1 装入 AH,BH 和 DL 6)程序运行的入口地址为 START 答案:DAT_SG SEGEMNT D1 DB 95 DAT_SG ENDS STK_SG SEGMENT DW 64 DUP(?)STK_SG ENDS COD_SG SEGMENT MAIN PROC FAR ASSUME CS:COD_SG ASSUME DS:DAT_SG,SS:STK_SG START:MOV AX,DAT-SG MOV DS,AX MOV AH,D1

9、MOV BH,AH MOV DL,AH MOV AH,4CH INT 21H MAIN ENDP COD_SG ENDS END START 11.执行下列指令后,AX 寄存器中的内容是什么?TABLE DW 10,20,30,40,50 ENTRY DW 3 .MOV BX,OFFSET TABLE ADD BX,ENTRY MOV AX,BX 答案:(AX)=1E00H 12.指出下列程序中的错误:STAKSG SEGMENT DB 100 DUP(?)STA_SG ENDS DTSEG SEGMENT DATA1 DB?DTSEG END CDSEG SEGMENT MAIN PROC

10、FAR START:MOV DS,DATSEG MOV AL,34H ADD AL,4FH MOV DATA,AL START ENDP CDSEG ENDS END 答案:改正后:STAKSG SEGMENT DB 100 DUP(?)欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!4/10 STAKSG ENDS (段名必须一致)DTSEG SEGMENT DATA1 DB?DTSEG ENDS (段的结束符为 ENDS)CDSEG SEGMENT MAIN PROC FAR ASSUME CS:CDSEG,DS:DTSEG,SS:STAKSG

11、(必须把涉及的段的段名与相应的段寄存器联系起来)START:MOV AX,DTSEG MOV DS,AX (不能利用立即数寻址方式向段寄存器赋初值)MOV AL,34H ADD AL,4FH MOV DATA1,AL MOV AH,4CH INT 21H (程序执行完后必须返回 DOS)MAIN ENDP (过程名前后必须一致)CDSEG ENDS END START (对主程序来说,程序结束符后必须跟程序的开始符)13.DATA SEGMENT TABLE_ADDR DW 1234H DATA ENDS .MOV BX,TABLE_ADDR LEA BX,TABLE_ADDR 请写出上述两条

12、指令执行后,BX 寄存器中的内容。答案:MOV BX,TABLE_ADDR ;执行后(BX)=1234H LEA BX,TABLE_ADDR ;执行后(BX)=OFFSET TABLE_ADDR 14试编写一个汇编语言程序段,要求对键盘输入的小写字母用大写字母显示出来。答案:abc:mov ah,1 int 21h cmp al,a jb stop cmp al,z ja stop sub al,20h mov dl,al mov ah,2 int 21h jmp abc stop:ret 15编写程序,比较两个字符串 STRING1 和 STRING2 所含字符是否完全相同,若相同则显示“M

13、ATCH”,若不同则显示“NO MATCH”。欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!5/10 答案:datarea segment string1 db asfioa string2 db xcviyoaf mess1 db MATCH,$mess2 db NO MATCH,$datarea ends prognam segment main proc far assume cs:prognam,ds:datarea start:push ds sub ax,ax push ax;返回 DOS mov ax,datarea mov ds,

14、ax mov es,ax;赋初值 begin:mov cx,string2-string1 mov bx,mess1-string2 cmp bx,cx;比较两字符串的长度 jnz dispno lea si,string1;若长度相同 lea di,string2;地址指针赋初值 repe cmpsb;比较 jne dispno mov ah,9;相同,显示 MATCH lea dx,mess1 int 21h ret dispno:mov ah,9;不同,显示 NO MATCH lea dx,mess2 int 21h ret main endp prognam ends end star

15、t 16把 010010之间的 30 个数,存入首地址为 GRAD 的字数组中,GRADE+i 表示学号为 i+1的学生成绩。另一个数组 RANK 是 30 个学生的名次表,其中 RANK+I 的内容是学号为 i+1 的学生的名次。试编写程序,根据 GRAD 中的学生成绩,将排列的名次填入 RANK 数组中(提示:一个学生的名次等于成绩高于这个学生的人数加 1)。答案:dseg segment grade dw 30 dup(?)rank dw 30 dup(?)dseg ends cseg segment main proc far assume cs:cseg,ds:dseg,es:dse

16、g start:push ds sub ax,ax push ax mov ax,dseg mov ds,ax mov es,ax begin:mov di,0 mov cx,30 loop1:push cx mov cx,30 mov si,0 mov ax,gradedi mov dx,0 loop2:cmp gradesi,ax jbe go_on inc dx go_on:add si,2 loop loop2 pop cx inc dx mov rankdi,dx add di,2 loop loop1 ret mainendp cseg ends end start 欢迎您阅读并下

17、载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!6/10 17编写一个程序,接收从键盘输入的 10 个十进制数字,输入回车符则停止输入,然后将这些数字加密后(用 XLAT 指令变换)存入内存缓冲区 BUFFER。加密表为:输入数字:0,1,2,3,4,5,6,7,8,9 密码数字:7,5,9,1,3,6,8,0,2,4 答案:scode db 7,5,9,1,3,6,8,0,2,4 buffer db 10 dup(?);mov si,0 mov cx,10 lea bx,scode input:mov ah,01 int 21h cmp al,0ah jz e

18、xit and al,0fh xlat mov buffersi,al inc si loop input exit:ret 18读下面程序,在其中的空处添上适当内容。该程序完成了什么功能?程序运行后,变量 RS 的值是多少?DATA SEGMENT BUF DB -13,24,5,-62 DB 77,20,-7,145,0 CNT DB$-BUF RS DB 0 DATA ENDS STACK SEGMENT PARA STACK DB 256 DUP(?)STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA ASSUME SS:STACK START

19、 PROC FAR PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX LEA BX,BUF MOV CH,0 MOV CL,LP:MOV AL,BX TEST AL,80H JE CONT INC RS CONT:INC BX LOOP LP RET START ENDP CODE ENDS END START 答:程序空处可填 CNT,字节变量 RS 的最后结果是 04H。该程序实现的功能是:统计数据段中以 BUF 为首址的带符号字节数据表中负数的个数,CNT 为表中所有数据的个数,即表的长度。需要注意的是:十进制数据“145”在以二进制带符号字节

20、数据形式存放时相当于“111”。19编写一个完整的源程序,将数据 35、-27、-13、6、-47、52、9、-3 中的正数放入以BUFFER 为首址的数据缓冲区中。答:一种可能的程序如下实现:欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!7/10 DATA SEGMENT BLOCK DB 35,27,13,6,47,52,9,3 COUNT EQU$BLOCK BUFFER DB COUNT DUP(?)DATA ENDS STACK SEGMENT PARA STACKSTACK DW 40 DUP(?)STACK ENDS CODE SE

21、GMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK BEGIN:MOV AX,DATA MOV DS,AX MOV ES,AX ;需用 STOS 串操作指令 MOV CX,COUNT LEA SI,BLOCK ;源数据区指针 LEA DI,BUFFER ;正数存放区指针 CLD ;自动增量 AGAIN:LODSB ;取源数据,并修改 SI TEST AL,80H ;取符号位,不影响 AL JS GO ;符号位=1,是负数,不存 STOSB ;存正数并修改 DI GO:LOOP AGAIN MOV AH,4CH ;退出循环,返回 DOS INT 21H C

22、ODE ENDS END BEGIN 20从内存单元 BUF 开始的缓冲区中有 7 个 8 位无符号数,依次为 13H、0D8H、92H、2AH、66H、0E0H、3FH。编程找出它们的中间值并放入 RES 单元,且将结果以“(RES)=?”的格式显示在屏幕上。答:一种可能的程序如下实现:DATA SEGMENT BUF DB 13H,0D8H,92H,2AH,66H,0E0H,3FH RES DB?;中间数的存放单元 STR DB (RES)=STR1 DB?,?,$;结果字符串 DATA ENDS SSEG SEGMENT PARA STACKSSEG DB 100 DUP(?)SSEG

23、ENDS CODE SEGMENT ASSUME CS:CODE,SS:SSEG,DS:DATA,ES:DATA MAIN PROC FAR ;主程序 PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV ES,AX ;有 STOS 指令,需用 ES MOV CX,6 ;外循环次数,比 6 次 AGN:MOV SI,OFFSET BUF MOV DI,SI INC DI ;SI、DI 指向相邻 2 数 MOV DX,6 ;内循环次数,比 6 次 AGN1:MOV AL,SI 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将

24、竭诚为您提供优质的文档!8/10 CMP AL,DI ;两个无符号数相比较 JB UNCH ;小于则转,不互换 EXCH:XCHG AL,DI ;前 1 单元较大,则互换 MOV SI,AL ;大数放在后面 UNCH:INC SI ;修改指针,指向下一个数 INC DI DEC DX JNZ AGN1 ;未处理完,继续内循环 LOOP AGN ;外循环 DONE:MOV AL,SI3 ;排序完成,取中间数 MOV RES,AL AND AL,0F0H ;分离高半字节 MOV CL,4 SHR AL,CL CALL BATR ;调子程序,将 AL 值转换为 ASCII 码 LEA DI,STR1

25、 ;DI 指向结果单元 CLD STOSB ;存放转换结果 MOV AL,RES AND AL,0FH ;分离并转换低半字节 CALL BATR STOSB LEA DX,STR ;显示整个字符串 MOV AH,09H INT 21H RET MAIN ENDP ;主程序 MAIN 结束 ;子程序 BATR,实现 16 进制数到 ASCII 码的转换 BATR PROC NEAR CMP AL,10 ;入口参数为 AL JB NUM ;是数字,则转 NUM ADD AL,A100;字母 NUM:ADD AL,0 RET BATR ENDP ;子程序结束 CODE ENDS END MAIN 简

26、析:本例的基本思路是:先把 7 个无符号数按大小排序,排序完成之后取位于中间的一个数即为中间值。然后将该 16 进制数转换为两个对应的 ASCII 码,再与要求的格式字符一起输出送显即可。数据排序可以是从大到小、或从小到大排列,本参考程序完成从小到大排序,由一个双重循环结构实现。内循环完成一个数与其它数之间的一一比较,并使每次比较所得的小数置于低地址单元。外循环实现所有数之间的两两相较。共 7 个数据,故内、外循环中的比较次数均为 6 次。编程时需注意:无符号数比较大小应使用 JA、JB、JAE、JBE 指令,本例完成从小到大的排列,故用 JB 控制转移到 UNCH;若要从大到小排列,则用 J

27、A 代替 JB 即可。对两个循环体进行初始化时,需仔细考虑指针和循环控制寄存器的初值。在数据段的定义中,分别定义 STR、STR1 两个变量名字,是为了便于在 STR1 处存放转换结果;显示时使 DX 直接指向 STR,以 STR1 末尾的“$”为结束符。中间值找出之后,应把高、低半欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!9/10 字节相分离,并分别转换为各所对应的 ASCII 码。21设某测试系统中,1 号端口为测试口,所得数据是 09 之间的十进制整数;2 号端口为显示口,对应于数字 09 的 LED 七段共阴显示码依次为:3FH、06

28、H、5BH、4FH、66H、6DH、3DH、07H、7FH、6FH。编写一段查表送显的程序,要求:先从测试口读入一个数据,再查表将相应的显示码从显示口送出,如此反复进行直至读入数据“0FFH”为止。答:一种可能的程序如下实现:DATA SEGMENT TAB DB 3FH,06H,5BH,4FH,66H DB 6DH,3DH,07H,7FH,6FH ;09 的七段码 DATA ENDS STACK SEGMENT PARA STACKSTACK DW 50 DUP(?)STACK ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK,DS:DATA START:M

29、OV AX,DATA MOV DS,AX LE BX,TAB ;BX 指向表首址 NEXT:IN AL,1 ;从测试口输入 CMP AL,0FFH JE STOP ;是 0FFH,结束 XLAT TAB ;不是 0FFH,查表转换 OUT 2,AL ;向显示口输出七段码 JMP NEXT ;继续测试 STOP:MOV AH,4CH INT 21H CODE ENDS END START 22有一个长度不超过 100 字节的字符串,以回车符结尾。编程统计其中非空格的字符个数,并将统计结果以自拟格式显示在 CRT 上。答:一种可能的程序如下实现:DATA SEGMENT STR DB Its a

30、fine day,isnt it?,0DH,$;依题意以 0DH 为结束符。加上“$”便于显示整个字符串 COUNT EQU$STR2 ;串长中不包括结束符和“$”符号 NUM DB 0 ;置统计结果初值为 0 STR1 DB The number of non-space charactors is,$DATA ENDS STACK SEGMENT PARA STACKSTACK DB 100 DUP(?)STACK ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK,DS:DATA,ES:DATA START:MOV AX,DATA MOV DS,AX MO

31、V ES,AX ;有 SCAS 指令,需用 ES LEA DI,STR CLD MOV AL,20H ;关键字符(空格)MOV CX,COUNT NEXT:SCASB JE SKIP ;是空格,跳过下一句 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!10/10 INC NUM ;非空格字符,NUM 加 1 SKIP:LOOP NEXT LEA DX,STR ;显示原字符串 MOV AH,09H INT 21H MOV DL,0AH ;显示换行符,以便显示另一字串 MOV AH,2 INT 21H LEA DX,STR1 ;显示另一个字符串 MO

32、V AH,9 INT 21H ;将 16 进制的统计结果转换为十进制数,再转换为两个 ASCII 码输出 MOV AL,NUM MOV AH,0 ;AX 中为待转换 16 进制数 MOV BL,10 DIV BL ;AX/BL ;商(十位)在 AL 中,余数(个位)在 AH 中,均为未组合 BCD 码 PUSH AX ;入栈保护 OR AL,30H ;将十位数转换为 ASCII 码 MOV DL,AL ;送 CRT 显示 MOV AH,2 INT 21H POP AX ;恢复除法运算的结果 ADD AH,30H ;将个位数转换为 ASCII 码 MOV DL,AH ;显示 MOV AH,2 I

33、NT 21H MOV AH,4CH ;完成,返回 DOS INT 21H CODE ENDS END START 简析:本例的关键在于统计结果的显示。统计完成后,结果单元中是一个 16 进制数。为符合一般习惯,应在 CRT 上显示十进制数,因此首先用除法将十位、个位分离开,再将其分别转换为 ASCII 码输出。由于除数是 10,故相除之后得到的商(十位数)和余数(个位数)必在 09 范围内,即未组合 BCD 码,所以很容易转换为 ASCII 码。编程时注意:DIV 指令执行后结果在 AX 中,而 DOS 功能调用必须用 AH 为调用号,故应保护 AX的内容。另外,原题已告知字串的结束符是 0DH,故亦可通过检索结束符(0DH)的方式控制循环。另外请注意:数据段中定义的 STR 串中出现的单引号前必须用另一个单引号转义,如“s”应为“s”。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁