微机原理习题(2)

2018-12-09 23:48

在数据区中,以TABLE开始连续存放0~6的立方值(称为立方表),设任给一数x(0≤x≤6),x在TAB1单元,查表求x的立方值,并把结果存入TAB2单元。

4-11. 假设学生某门课的成绩存放在数据区中,请编一程序,统计该成绩中小于60分的人数,60~90分的人数,大于90分的人数,并显示在屏幕上。

4-12. 在数据区中以如下方式存放数据:

DATA SEGMENT LIST1 DB 15 DB 48 DB ?

LIST2 DB 20,53,?

4-13. 编一个十进制的乘法程序,被乘数和乘数均以ASCII码的形式存放在内存中,将乘积在屏幕上显示出来。

4-14. 在A1单元开始定义了一长度为N的字符串,找出其中所有的小写字母并存放到A2单元开始的存储区中。统计出小写字母的个数,存放到SL单元中。请编写一完整的源程序。数据段如下: data segment

A1 db ‘ab1243AdcBBcdEd94r3’ N equ $-A1 A2 db N dup(?) Sl db ? data ends

4-15. 编写一个完整的源程序,将BUF字节单元存放的两位BCD码,转换成2个字节的ASCII码,并分别存放在ASC和ASC+1字节单元中。

例如:(BUF字节单元)=58H,那么(ASC字节单元)=35H,(ASC+1字节单元)=38H。

4-16. 设在DAT1,DAT2字单元中存放一双字长有符号数,编一程序段,完成求出该双字长数的绝对值后送ABS1和ABS2字存储单元。

4-17. 在附加数据段中有一首址为ADDR的没有排序字数组,数据的第一个字为数组长度,第二个字开始存放数组各元素。在KEY单元存放一要删除的字数据。要求编一完整程序,在数组中查找该数,如果找到该数,将其从数组中删除,并修改数组长度。 4-18. 试编写一程序段,在CHAR为首址的26个字节单元中依次存放字母‘A’~‘Z’。以BUF为首址的存储区,存放有若干个有符号字数据,试编写一程序求出其中负数的平均值(负数之和>-32768),并存放在MEA2单元中。 4-19. 编写完整程序,把从键盘读入的一个小写字母转换成相应的大写母,并输出。

4-20. 编写程序,从键盘读入一个符号,如果它的ASCII值是偶数则输出0,是奇数则输出1。[提示:输出除以2的余数]

4-21. 从键盘读入一个小写字母,输出字母表中倒数与该字母序号相同的那个字母。例如输入首字母a,则输出最后一个字母z,输入第4个字母d则输出倒数第4个字母w。

4-22. 编写一个程序段,把AL中的高4位与低4位交换位置。 4-23. 编写完整程序,用十六进制输出一个按键的ASCII值,要求输出形式是:A=41H

4-24. 编写完整程序,用二进制输出一个按键的ASCII值。(课本上有)

4-25. 编写完整程序,判断一个按键是不是回车键。

4-26. 编写完整程序,输入一个字母,输出该字母在英文字母表中的顺序号,若输入的不是字母则输出“*”。注意输入的字母既可以是大定也可以是小写。

4-27. 编写完整程序,把键盘输入的三个按键按ASCII值由小到大

的次序输出。

4-28. 设变量int1和int2的定义如下: int1 db ‘935797238’ int2 db ‘843758912’

编写程序把int1和int2中以字符串形式存放的两个长整数相加,结果仍然以同样的形式放回变量int1中。

4-29. 编写完整程序,从键盘读入一个符号串,把各符号颠倒顺序后输出。

4-30. 设变量k中存放了由100个有符号整数组成的数组,编写程序段找出其中最大的一个,放到AX中(注意:编程时只用于10个数)。 4-31. 设变量k中存放了由100个有符号整数组成的数组,编写程序段找出其中第几个数是0,把结果放在DI中,若整个数组中没有0,则在DI中放-1表示。

4-32. 把输入的一个符号串中的空格删掉,存入另一个变量中,然后输出处理后的结果。

4-33. 编写一个向用户提供字符的ASCII的程序,对用户输入的一个字符,以十六进制显示相应的ASCII值,要求输入和输出的形式如下:

THE ASCII CODE OF A IS 41H

其中的下划线表示用户输入的字符。当用户输入回车键时,程序结束。

4-34. 利用子程序read和write,编写完整程序,对输入的两个整数比较大小,输出其中大的一个。

4-35. 编写排序子程序sort,以ds、si和cx作为入口参数,把ds:si

为起始地址的一个带符号的字型数组进行由小到大排序,参数cx中存放的是数组中元素个数。

4-36. 编写一个子程序,判断一个无符号数是不是素数。入口参数和出口参数自行设计。

4-37. 编写递归子程序,求两个正整数的最大公约数。

4-38. 编写递归子程序,求下面的数列的第n项。(费波那契数列) 4-39. 为下面的问题设计子程序的入口参数和出口参数 (1) 求比x大的下一个素数

(2) 求3个带符号整数的平均值(不计余数)

4-40. 编写一个子程序,以AX为入口参数,把AX中的各个二进制位颠倒次序后还放回AX中。比如,入口参数AX=101100011110100B,则处理后AX应为1001011110001101B。 4-41. 编写子程序,入口参数是一个字型数据,统计该字的16个二进制位中含有多少个1和多少个0。

4-42程序,调用第4-34题的read子程序,从键盘读入一个带符号整数,以二进制输出其补码。

4-43.从键盘读入两个英文单词,按字典顺序输出. 4-44.试简述程序设计的4个步骤。

4-45.一个由20个字组成的数据区,其起始地址为610AH:1CE7H。试写出数据区首末单元的实际地址PA。

4-46

.一个程序段开始执行之前,(CS)=97F0H,(IP)=1B40H,

试问该程序段启动执行指令的实际地址是什么?

4-47 . 有两个16位的字31DAH,5E7FH,它们在8086系统存储器中的地址分别为00130H和00134H,试画出它们的存储示意图。 4-48 . 字符串“Hello!”的ASCII码依次存入从00330H开始的字节单元中,试画出它们存放的示意图。

4-49 . 什么叫汇编?汇编程序的功能有哪些?

4-50. 什么叫基本汇编?什么叫宏汇编?两者之间有何差别? 4-51

. 汇编程序和汇编源程序有什么差别?两者的作用是什

么?

4-52

. 一个汇编源程序应该由哪些逻辑段组成?各段如何定

义?各段的作用和使用注意事项是什么?

4-53 . 汇编语言源程序的语句类型有哪几种?各自的作用和使用规则是什么?

4-54 . 语句标号和变量应具备的3种属性是什么?各属性的作用是什么?如何使用?

4-55 . 怎样在机器上建立、编辑、汇编、连接、运行、调试一个汇编语言源程序?

4-56 . 已知数据段DATA从存储器实际地址02000H开始,作如下定义:

DATA SEGMENT

VAR1 DB 2 DUP(0,1,?) VAR2 DW 50 DUP(?)

VAR3 DB 10 DUP(0,1,2 DUP(4),5) DATA ENDS

求出3个变量的SEG、OFFSET、TYPE、LENGTH和SIZE。

4-57. 已知数据区定义了下列语句,采用图示说明变量在内存单元的分配情况以及数据的预置情况。

DATA SEGMENT

A1 DB 20H,52H,2 DUP(0,?)

A2 DB 2 DUP(2,3 DUP(1,2),0,8) A3 DB ‘GOOD!’ A4 DW 1020H,3050H A5 DD A3 DATA ENDS

4-58. 采用示意图来说明下列变量在内存单元的分配以及数据的预置。

DATA SEGMENT ORG 4

VAR1 DW 9

VAR2 DW 2 DUP(0) CONT EQU 2

VAR3 DB CONT DUP(?,8)

VAR4 DB 2 DUP(?,CONT DUP(0),′AB′) DATA ENDS

4-59. 已知3个变量的数据定义如下所示,分析给定的指令是否正确,有错误时加以改正。

DATA SEGMENT VAR1 DB ? VAR2 DB 10 VAR3 EQU 100 DATA ENDS

(1) MOV VAR1,AX (2) MOV VAR3,AX (3) MOV BX,VAR1 (4) MOV [BX],10 (5) CMP VAR1,VAR2 (6) VAR3 EQU 20

4-60. 设VAR1和VAR2为字变量,LAB为标号,分析下列指令的错误之处,并加以改正。

(1) ADD VAR1,VAR2 (2) MOV AL,VAR2 (3) SUB AL,VAR1 (4) JMP LAB[SI] (5) JNZ VAR1 (6) JMP NEAR LAB

4-61. 已知3个学生的姓名、学号、3门课成绩,定义一个结构,给出3条结构预置语句,将3个学生的情况送入3个结构变量。 4-62. 编程实现求S=(X2+Y2)/Z的值,并将结果放入RESULT

单元。

4-63. 编程序计算S=(A+B)/2-2(A AND B)。

4-64. 试编写程序,对BUF字节存储区中的3个数进行比较,并按比较结果显示如下信息。

(1)如果3个数都不相等则显示0;

(2)如果3个数中有2个数相等则显示1; (3)如果3个数都相等则显示2。

4-65. ?2编写程序,计算下面函数的值。x(x?0) s???3x(0??x??10) 4-66. ??4求xS=12

+22

+32

+?的前x?10N项和,使和S刚刚大于1000。 4-67. 从键盘输入一系列字符,以回车符结束,编程统计其中非数字字符的个数。

4-68. 在数据段中有一个字节数组,编程统计其中正数的个数,放入A单元,负数的个数,放入B单元。 4-69. 编程序使:

(1) AX寄存器低4位清零。 (2) BX寄存器低4位置“1”。 (3) CX寄存器低4位变反。

(4) 用TEST指令测试DL寄存器位3,位6是否同时为0,若是,将0送DL;否则1送DH。

4-70. 编一程序段,完成符号函数: 1 x>0(-128≤x≤127) y = 0 x=0

1 x<0

假设x的值存放在DATA1中,y的值存放在DATA2中。 4-71. 设AX寄存器中有一个16位二进制数,编一程序,统计AX中“1”的个数,统计结果送CX中。

4-72. 编一子程序利用XLAT指令把十六进制数转换成ASCII码。假设ASCII码存放在以DAT1为首地址的数据区中,对应的十六进制数放在以DAT2为首地址的数据区中,转换结果送以DAT3为首地址的数据区中。

4-73. 在数据区中,以TABLE开始连续存放0~6的立方值(称为立方表),设任给一数x(0≤x≤6),x在TAB1单元,查表求x的立方值,并把结果存入TAB2单元。

4-74. 假设学生某门课的成绩存放在数据区中,请编一程序,统计该成绩中小于60分的人数,60~90分的人数,大于90分的人数,并显示在屏幕上。

4-75. 在数据区中以如下方式存放数据:

DATA SEGMENT LIST1 DB 15 DB 48 DB ?

LIST2 DB 20,53,?

4-76. 编一个十进制的乘法程序,被乘数和乘数均以ASCII码的形式存放在内存中,将乘积在屏幕上显示出来。

4-77. 下面是80X86宏汇编语言中关于SHORT和NEAR的叙述,哪一个是正确的?

(A)它们都可以直接指示无条件转移指令目标地址的属性

(B)它们都必须借助于PTR才能指示无条件转移指令目标地址的属性

(C)SHORT必须借助于PTR才能指示无条件转移指令目标地址的属性 (D)NEAR必须借助于PTR才能指示无条件转移指令目标地址的属性

4-78. 若汇编语言源程序中段的定位类型设定为PARA,则该程序目标代码在内存中的段起始地址应满足什么条件?

(A)可以从任意地址开始 (B)必须是偶地址 (C)必须能被16整除 (D)必须能被256整除

4-79. 程序设计的基本的结构有顺序结构、( )、( )。 4-80. 中断处理的过程是保存断点、( )、( )、( )、( )。

4-81. 什么是变量,变量有哪些属性,如何使用这些属性?(9分) 4-82. 程序设计的基本的结构有顺序结构、( )、(

)。

4-1.答: abc: mov ah,1 int 21h cmpal,‘a’ jb stop

cmp al,‘z’ ja stop sub al,20h mov dl,al mov ah,2 int 21h jmp abc stop: ret 4-2.答: 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

mov ax,datarea mov ds,ax mov es,ax

begin: mov cx, string2-string1 mov bx, mess1-string2 cmp bx,cx jnz dispno lea dx,addr lea si,string1 lea di,string2 repe cmpsb jne dispno mov ah,9 lea dx,mess1 ret

dispno:movah, 9 lea dx, mess2 int 21h ret

main endp prognam ends end start

4-3.答:

data segment

array dw 3 dup(?)

data ends

code segment main proc far assume cs:code,ds:data

start: push ds sub ax,ax push ax

mov ax,data mov ds,ax mov cx,3

lea si,array begin: push cx mov cl,4 mov di,4

mov dl, ‘ ‘ mov ah,02 int 21h mov dx,0 input: mov ah,01 int 21h and al,0fh shl dx,cl or dl,al dec di jne input mov [si],dx add si,2 pop cx loop begin

comp: lea si,array mov dl,0 mov ax,[si] mov bx,[si+2] cmp ax,bx jne next1 add dl,2

next1: cmp [si+4],ax jne next2 add dx,2

next2: cmp [si+4],bx jne num add dl,2

num: cmp dx,3 jl disp mov dl,3

disp: mov ah,2 add dl,30h int 21h ret main endp code ends end start

4-14.答:

data segment ;数据段A1 db ‘ab1243AdcBBcdEd94r3’ N equ $-A1

A2 db N dup(?) Sl db ? data ends

code segment ;代码段assume cs:code, ds:data

main: mov ax,data mov ds,ax lea si,a1 lea di,a2 mov cx,N xor bl,bl

lab1: mov al,[si] cmp al,‘a’ jb lab2

cmp al,‘z’ ja lab2 mov [di],al inc bl inc di

lab2: inc si loop lab1 mov sl,bl

mov ah,2 ;以下程序段可以不写,只是利用输出屏幕验证题目的正确性。 mov cx,N lea bx,a1

lab3: mov dl,[bx] int 21h inc bx loop lab3 call cr mov ah,2 mov ch,0 mov cl,[sl] lea bx,a2

lab4: mov dl,[bx] int 21h inc bx loop lab4 call cr mov ah,0 mov al,[sl] call write mov ah,4ch int 21h

include cr.asm include write.asm code ends end main

4-15.答: data segment buf db 58h asc db 2 dup(?) data ends

code segment

assume cs:code, ds:data main: mov ax,data mov ds,ax mov al,buf and al,0f0h shr al,cl or al,30h mov asc,al mov al,buf and al,0fh or al,30h

mov asc+1,al mov ah,4ch int 21h code ends end main 4-16.答

start:mov ax,dat1 ;AX放低位字有符号数 mov dx,dat2 ;DX放高位字有符号数 or dx,dx ;产生标志位

jns next ;若为正数转next

not ax ;若为负数则低位字求反 not dx ;并且高位字求反 add ax,1 ;低位字加1

adc dx,0 ;若有进位则高位字再加1 next: mov abs1,ax ;abs1放低位字绝对值 mov abs2,dx ;abs2放高位字绝对值

4-17.答: data segment

addr dw 8,1275h,4652h,0034h,4cbah,1ff0h,563bh,5312h,89abh key dw 0034h data ends code segment

assume cs:code, ds:data, es:data find proc far push ds xor ax,ax push ax mov ax,data mov ds,ax mov es,ax lea di,addr push di mov ax,key

mov cx,es:[di] add di,2 cld

repnz scasw jz delete pop di jmp exit

delete: jcxz next del: mov bx es:[di] mov es:[di-2],bx add di,2 loop del next: pop di

dec word ptr es:[di] exit: ret find endp

main: call find code ends end main

4-18.答:

char db 26 dup(?) ...

start:lea bx,char mov al,‘A’ mov cx,26

lop1: mov [bx],al inc al inc bx loop lop1 ...

4-19.答:

[解法1]

code segment assume cs:code main: mov ah,1

int 21h ;输入字符到al mov bl,al ;暂存到bl中

sub bl,32 ;小写字母转成大写字母 mov ah,2 ;回车换行 mov dl,13 int 21h mov dl,10 int 21h

mov dl,bl ;输出大写字母 int 21h

mov ah,4ch ;控制权交还DOS int 21h code ends end main [解法2]

data segment

buf1 db “Input a upper char:”,‘$’

buf2 db 13,10,“not a lower char!”,13,10,‘$’ data ends code segment assume cs:code

main: mov ax,data ;输出提示buf1 mov ds,ax lea dx,buf1 mov ah,9 int 21h

mov ah,1 ;输入字符并暂存到bl中 int 21h mov bl,al cmp bl,‘a’ jb lab1

cmp bl,‘z’ ja lab1

sub bl,32 ;小写字母转成大写字母 mov ah,2 ;回车换行 mov dl,13 int 21h mov dl,10 int 21h

mov dl,bl ;输出大写字母 int 21h jmp lab

lab1: mov ah,9 ;输出输入字符非小写字母的提示 lea dx,buf2 int 21h

lab: mov ah,4ch ;控制权交还DOS int 21h code ends end main 4-20.答:

code segment assume cs:code main: mov ah,1

int 21h ;输入字符到al mov ah,0 ;准备被除数ax mov bl,2 ;准备除数bl

div bl ;ax除bl,余数在ah中 add ah,30h ;转换成字符对应的ascii码 mov bl,ah ;暂存到bl中

mov ah,2 ;回车换行 mov dl,13 int 21h mov dl,10 int 21h

mov dl,bl ;输出该字符 int 21h

mov ah,4ch ;控制权交还DOS int 21h code ends end main 4-21.答:

code segment assume cs:code main: mov ah,1

int 21h ;输入字符到al mov bl,‘z’ ;求对应的字母并暂存到bl sub bl,al add bl,‘a’

mov ah,2 ;回车换行 mov dl,13 int 21h mov dl,10 int 21h

mov dl,bl ;输出该字符 int 21h

mov ah,4ch ;控制权交还DOS int 21h code ends end main 4-22.答:

code segment assume cs:code main: mov ah,1

int 21h ;输入字符到al mov bl,10h

mul bl ;al*10h的积在ax中(ah为高位转为低位,al为低位转为高位。) add al,ah

mov bl,al ;将结果暂存到bl中 mov ah,2 ;回车换行 mov dl,13 int 21h mov dl,10 int 21h

mov dl,bl ;输出结果 int 21h

mov ah,4ch ;控制权交还DOS int 21h code ends end main

4-23.答:

code segment assume cs:code main: mov ah,1

int 21h ;输入字符到al mov bl,al ;暂存到bl中 mov ah,2 ;回车换行 mov dl,13 int 21h mov dl,10 int 21h


微机原理习题(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:共31套的操作题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: