微型计算机原理选择题,微机原理复习题6(含答案)

汇编语言试卷

一、单项选择题(本大题共20小题,每小题1分,共20分)

1.设A=0.4H,B=0.8H,C=0.4,D=0.4Q,它们之间的关系是( C )。 A) C+D=B

B) A+D=B C) B=D

D) A>C>D

D)AF,OF,SF

2.标志寄存器中属于控制标志位的是( B )。 A)DF,OF,SF B)DF,IF,TF C)OF,CF,PF 3.8088/8086存储器分段,每个段不超过( D ) A)64K个字 A)DEC AL AAS AAS

B)32K个字节 C)1兆个字节 D)64K个字节

B)SBB AL,0 DAS D)SUB AL,1 DAS

B)MOV DX,1234H 1N AL,DX D)OUT DX,1234H

D)DEC AX

D)影响CF进位标志

4.设AL中已有压缩型BCD码,为实现对AL的减1操作,可选用的指令序列是( D )。

C)SUB AL,1

5.要输入端口1234H中的8位数据,其指令应是( 5 )。 A)MOV DX,1234H OUT DX,AL C)1N AX,1234H A)NEG AX

6.若AX=-15要得到AX=15应执行的指令是( A )。

B)NOT AX C)INC AX

7.8086/8088系统执行传送指令MOV时( A )。 A)不影响标志位 8.MOV AL,79 ADD AL,0B1H

上面指令执行后,设置的标志位CF和OF的值是( D ) A)CF=0,OF=1 A)DIV BX

B)CF=1,OF=1 C)CF=0,OF=1

B)CWD IDIV BX D)CBW IDIV BX B)ADD AL,BL D)1NC [DI]

D)CF=1,OF=0

9.已知AX,BX中均为带符号数,当进行字相除时,下面指令或指令序列正确的是( B )。

B)影响DF方向标志 C)影响SF符号标志

C)XOR DX,DX DIV BX

10.下列指令中操作数在代码段中的是( A )。 A)MOV AL,42H C)SUB [BX],DI

11.用REPE SCASB指令对字符串进行扫描,如CX0时,扫描结束,那么表示( D )。 A)在字符串中遇上第一个AL中指定的字符 B)在字符串中有一个AL中指定的字符 C)在字符串中有一个不是AL中指定的字符 D)在字符串中遇上第一个不是AL中指令的字符

12.下列指令执行后对源和目的操作数均无影响的是( D )。

A)MOV [BX+2],AX B)SUB AX,2467H C)SBB [SI],BX D)CMP AX,BX 13.表示过程定义结束的伪指令是( A )。

A)ENDP B)ENDS C)END D)ENDM

D)DB ˋCDˊ

14.下列有语法错误的语句是( C )。 A)DB 12H

B)DW 4567H C)DD ˋBCDˊ

15.DB1 DB 8 DUP(2 DUP(3),3 DUP(2))

MOV AX,WORD PTR DB1 [04H] 上面指令执行后,AX的内容是( A )。 A)0302H

B)0203H C)0202H

D)0303H

16.BUF1 DB 3 DUP(0,2 DUP (1,2),3)

COUNT EQU $ -BUF1

符号COUNT等价的值是( B )。 A)6

B)18 C)16

D)8

17.DA1 DW 2A05H

DA2 DB 0FAH

MOV AL,BYTE PTR DA1 SUB DA2,AL

上述指令执行后,DA2中的内容是( C )。 A)0DAH A)33CECH

B)0FAH C)0F5H

D)0D0H

D)33CE8H

18.设(SS)=338AH,(SP)=450H,执行PUSH BX,和PUSHF两条指令后,堆栈顶部的物理地址是( A )。

B)33CF2H C)33CF4H

19.设(SP)=0028H,执行段内返回指令RET 6后,SP的内容是( C )。 A)0036H B)0022H C)0030H D)0020H 20.条件转移指令JNBE产生转移的条件是( A )。 A) CF=0 AND ZF=0

B) CF=0 AND ZF=1 C) CF=1 AND ZF=0 D) CF=1 AND ZF=1

二、填空题(本大题共5小题,每小题1分,共5分)

21.8086/8088CPU允许最大的存储空间为1MB,因此CPU的地址总线是 20 位。

22.一个语句的名字项可以是标号或变量,在程序中它们两个在书写形式上的主要区别是 标号及其所代表的

指令之间用冒号分开,变量及其所代表的数据之间用空格分开。 。

23.无符号数和带符号数的两组条件转移指令,每条指令都有完全等效的两个指令助记符,例如,JL指令另

一个指令助记符是 JNGE 。

24.指令MOV AX,SEG BUF的执行,是把 BUF所在段的地址 送到AX中。

25.如果多个条件转移指令实现多路分支程序设计,那么为实现5路分支,需要 4 个条件转移指令。

三、简答题(本大题共3小题,每小题2分,共6分)

假设DS=2000H,

COUNT=0100H,SI=0030H,指令MOV AX,COUNT[ST]

①写出源操作数的物理地址?②该指令可否写成MOV AX,[COUNT+SI]?.①物理地址=20130H ②可以

27.下面指令有无错误?若有错,是什么错误?

① MOV AX,[SI][DI] 不能用两个变址连用 ,其中一个应为基址。② CMP [SI],[BX] 存储单元之间不能直接比较

28.条件转移指令的判断条件除标志位PF外还有哪几个标志位?OF、ZF、SF 和CF 的标志位

四、程序分析题(本大题共29.ADR DW 1234H,5678H

LEA SI,ADR LDS BX,ADR

7小题,每小题5分,共35分)

设变量ADR的偏移地址是100H,上述两条指令执行后:SI= 100H ,BX= 1234H 。

30.已知DS和ES指向同一个段,且当前数据段从0000H到00FFH单元内容分别为01,02,03,…,0FF,

00H。问下列程序段执行后,0000~0009H的内容是些什么值。 MOV SI,0000H MOV DI,0001H MOV CX,0080H CLD

REP MOVSW 答案:(从0 单元开始的内容是01,01,02,02,04,04,06,06,08,08) 31.STR1 DB ˋCOMPUTERNDPASCALˊ

SCA DB ˋNˊ

LEA DI,STR1 MOV AL,SCA MOV CX,10H CLD

REPNE SCASB

NEXT:……

程序运行到NEXT时CX= 7 ZF= 1 32.已知AX=0FFFFH,DX=0001H

MOV CX,2

LOP:SHL AX,1

RCL DX,1 LOOP LOP

上述程序段执行后,DX= 0007H AX= OFFFCH 33.已知DX=0A476H,CX=0302H,CF=1

OR DX,DX RCR DX,CL XCHG CH,CL RCL DX,CL

上述程序段执行后,DX= 48ECH CF= 1 34.MOV AX,10 SHL AX,1 SHL AX,1 MOV BX,AX MOV CL,2 SHL AX,CL ADD AX,BX

上述程序段执行后,BX= 40或28H AX= 200或0OC8H 35.已知AX=78H,BX=0804H

SHR BX,1 AND BX,0F0FH MOV CX,4 LOP:XCHG BH,BL DIV BL

SAL AX,1 LOOP LOP

上述程序段执行后,AX= 30/1EH BX= 0402H

五、程序填空题(本大题共2小题,每小题6分,共12分)

36.下面程序执行后,AL的内容为ARRAY数组中的最小数,请在空白处各填上一条指令。 ARRAY DB 3,5,-3,-2,4,5,-8,6

MOV CX,7 MOV DI,0 MOV AL,ARRAY

A1: INC DI ① CMI AL,ARRAY JLE A2

MOV AL,ARRAY [DI] A2: ② LOOP Al 37.下面程序段是判断两个存储单元是否同为正数,如是,则AX置全0,否则AX置非0。试在空白处各填

上适当的一条条件转移指令(两空白处要利用不同的标志位选用不同的条件转移指令)。 VAR1 DW ×××× VAR2 DW ××××

MOV AX,VAR1 MOV BX,VAR2 XOR AX,BX

① JS NEXT

TEST BX,8000H ② JNE NEXT MOV AX,0 NEXT:……

六、编程序(本大题共3小题,共22分)

38.编一程序段将BUF字节单元中的数折成高低四位,并且将分离出的高四位和低四位分别放于BUF+1和BUF+2字节单元的低四位上。(5分) MOV AL,BUF MOV BUF+2,AL AND BUF+2.0FH

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来帮你解决这个问题。 首先,选择排序是一种简单但低效的排序算法,它的基本思路是从数组中选择最小的元素,将其放置在数组的起始位置,然后再从剩余元素中选择最小的元素,放置在已排好序的元素的末尾,以此类推,直到所有元素都排好序为止。 下面是使用C语言实现10个数的选择排序的代码: ```c #include <stdio.h> void selectionSort(int arr[], int n); int main() { int arr[10] = {32, 12, 45, 67, 23, 9, 16, 78, 54, 21}; printf("Original array: "); for (int i = 0; i < 10; i++) { printf("%d ", arr[i]); } selectionSort(arr, 10); printf("\nSorted array: "); for (int i = 0; i < 10; i++) { printf("%d ", arr[i]); } return 0; } void selectionSort(int arr[], int n) { int i, j, minIndex, tmp; for (i = 0; i < n - 1; i++) { minIndex = i; for (j = i + 1; j < n; j++) { if (arr[j] < arr[minIndex]) { minIndex = j; } } if (minIndex != i) { tmp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = tmp; } } } ``` 代码的实现很简单,我们首先定义了一个 `selectionSort` 函数,这个函数接收一个整型数组和数组的长度作为参数,然后进行选择排序操作。选择排序的过程中,我们使用两层循环遍历数组,外层循环从 0 开始,每次循环选出一个最小,内层循环从外层循环的下一个位置开始,每次循环比较当前和已选出的最小的大小,如果当前更小,则更新最小的下标。内层循环结束后,我们将最小和外层循环的位置进行交换,然后继续进行下一轮循环,直到数组排好序为止。 在主函数中,我们定义了一个包含10个元素的数组,并初始化了数组的。然后,我们输出原始数组,调用 `selectionSort` 函数进行排序,最后输出排好序的数组。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值