TVP

# 微机原理汇编语言考试参考试题

e1.txt

;1:编程将（AX）＝2387、（BX）＝192FH、（CX）＝9256中的无符号数按由大到

;小的顺序排序，上机编程调试出程序，并将排序结果记录在下面。

code segment

assume cs:code

start: mov ax,2387

mov bx,192fh

mov cx,9256

cmp ax,bx

jae next1

mov dx,ax

mov ax,bx

mov bx,dx

next1: cmp bx,cx

ja next2

mov dx,bx

mov bx,cx

mov cx,dx

next2: cmp ax,bx

jae next3

mov dx,ax

mov ax,bx

mov bx,dx

next3:

mov ah,4ch

int 21h

code ends

end start

*********************************

e2.txt

; 2:编程将（BX）＝8600H、（CX）＝3489H、（DX）＝9235按有符号数由大到小

;排序，上机编程调试出程序，并将排序结果记录在下面。

code segment

assume cs:code

start: mov bx,8600h

mov cx,3489h

mov dx,9235

cmp bx,cx

jge next1

mov ax,bx

mov bx,cx

mov cx,ax

next1: cmp cx,dx

jge next2

mov ax,cx

mov cx,dx

mov dx,ax

next2: cmp bx,cx

jge next3

mov ax,bx

mov bx,cx

mov cx,ax

next3: mov ah,4ch

int 21h

code ends

end start

*********************************

e3.txt

; 3:在数据段中定义如下数据：32,34,89H,，编程将以上数据按有符号数

;进行排序，并将结果记录下来。

data segment

num db 32,34,89h

data ends

code segment

assume cs:code,ds:data

start: mov ax,data

mov ds,ax

lea si,num

mov al,[si]

cmp al,[si+1]

jge next1

mov bl,[si+1]

mov [si],bl

mov [si+1],al

next1: mov al,[si+1]

cmp al,[si+2]

jge next2

mov bl,[si+2]

mov [si+1],bl

mov [si+2],al

next2: mov al,[si]

cmp al,[si+1]

jge next3

mov bl,[si+1]

mov [si],bl

mov [si+1],al

next3: int 3

mov ah,4ch

int 21h

code ends

end start

*********************************

e4.txt

;4:在数据段中定义如下数据：99,25,86，编程将以上数据按无符号数进行排序，

;上机调试出程序，并将结果记录下来。

data segment

nums db 99,25,86

data ends

code segment

assume cs:code,ds:data

start: mov ax,data

mov ds,ax

lea si,nums

mov al,[si]

cmp al,[si+1]

jae next1

mov ah,[si+1]

mov [si+1],al

mov [si],ah

next1: mov al,[si+1]

cmp al,[si+2]

jae next2

mov ah,[si+2]

mov [si+2],al

mov [si+1],ah

next2: mov al,[si]

cmp al,[si+1]

jae next3

mov ah,[si+1]

mov [si+1],al

mov [si],ah

next3: int 3

mov ah,4ch

int 21h

code ends

end start

*********************************

e5.txt

; 5:(AL)=86H，(AH)=34H,(BL)=78H,编程将以上数据按有符号数进行排序，

;上机调试出程序，并将结果记录下来。

code segment

assume cs:code

start: mov al,86h

mov ah,34h

mov bl,78h

cmp al,ah

jge next1

mov ch,al

mov al,ah

mov ah,ch

next1: cmp ah,bl

jge next2

mov ch,bl

mov bl,ah

mov ah,ch

next2: cmp al,ah

jge next3

mov ch,al

mov al,ah

mov ah,ch

next3: int 3

mov ah,4ch

int 21h

code ends

end start

*********************************

e6.txt

; 6:中断向量为：1234H:5678H，编程将此数据设置成为类型号0对应的中断向

;量，上机调试出程序，并将结果记录下来。（直接用MOV 指令写入即可）

code segment

assume cs:code

start: mov ax,0

mov ds,ax

cli

mov [si],5678h

mov [si+2],1234h

sti

int 0

mov ah,4ch

int 21h

code ends

end start

*********************************

e7.txt

; 7:中断向量为：3456H:6678H，编程将此数据设置成为类型号60h对应的中断’

;向量，上机调试出程序，并将结果记录下来。（直接用MOV 指令写入即可）

code segment

assume cs:code

start: mov ax,0

mov ds,ax

mov ax,60h

mov bx,4

mul bx

mov si,ax

cli

mov [si],6678h

mov [si+2],3456h

sti

int 60h

mov ah,4ch

int 21h

code ends

end start

*********************************

e8.txt

; 8:中断向量为：编程将中断向量类型号为60H所对应的中断向量从中断向量表

;中取出来分别放在ES和DI中，上机调试出程序，并将程序和结果记录下来。

;（直接用MOV 指令即可）

code segment

assume cs:code

start: mov ax,0

mov ds,ax

mov ax,60h

mov bx,4

mul bx

mov si,ax

mov es,[si]

mov di,[si+2]

mov ah,4ch

int 21h

code ends

end start

*********************************

e9.txt

; 9:中断向量为：编程将中断向量类型号21H所对应的中断向量从中断向量表中

;取出来分别放在SI和BP中，上机调试出程序，并将程序和结果记录下来。

;（直接用MOV 指令即可）

code segment

assume cs:code

start: mov ax,0

mov ds,ax

mov ax,21h

mov bx,4

mul bx

mov di,ax

mov si,[di]

mov bp,[di+2]

mov ah,4ch

int 21h

code ends

end start

*********************************

e10.txt

; 10:中断向量为：编程将中断向量类型号45H所对应的中断向量从中断向量表

;中取出来分别放在DI和BP中，上机调试出程序，并将程序和结果记录下来。

;（直接用MOV 指令即可）

code segment

assume cs:code

start: mov ax,0

mov ds,ax

mov ax,45h

mov bx,4

mul bx

mov si,ax

mov di,[si]

mov bp,[si+2]

int 45h

mov ah,4ch

int 21h

code ends

end start

*********************************

11:利用实验箱中的8255并口芯片实现1个发光二极管的闪烁。

code segment

assume cs:code

start: mov dx,283h

mov al,80h

out dx,al

lop: mov al,00h

out dx,al

call delay

mov al,01h

out dx,al

call delay

jmp lop

mov ah,4ch

int 21h

delay proc

mov cx,60000

lop1: mov bx,200

lop2: dec bx

jnz lop2

loop lop1

ret

delay endp

code ends

end start

12：在交通灯实验中请使用8255的C口 按位输出，置1/置0 的功能实现如下现象： 南北路口的绿灯、东西路口的红灯同时亮30秒左右。

code segment

assume cs:code

start:

mov dx,283h

mov al,80h

out dx,al

mov al,00001011b

out dx,al

mov al,00000101b

out dx,al

mov cx,20000

k2: mov bx,18000

k1: dec bx

jnz k1

loop k2

mov dx,282h

mov al,0

out dx,al

mov ah,4ch

int 21h

code ends

end start

13：在交通灯实验中，请使用8255的C口 按位输出，置1/置0 的功能实现如下现象：东西路口的黄灯闪烁5次。

code segment

assume cs:code

start: mov di,5

mov dx,283h

mov al,80h

out dx,al

mov al,00000010b

out dx,al

lop: mov al,00000011b

out dx,al

mov cx,2000

k2: mov bx,3000

k1: dec bx

jnz k1

loop k2

mov al,00000010b

out dx,al

mov cx,2000

k3: mov bx,3000

k4: dec bx

jnz k4

loop k3

dec di

jnz lop

mov ah,4ch

int 21h

code ends

end start

14：利用8255A的PC7产生负脉冲：

code segment

assume cs:code

start: mov dx,283h

mov al,80h

out dx,al

mov al,0fh

out dx,al

call delay

mov al,0eh

out dx,al

call delay

mov al,0fh

out dx,al

call delay

mov ah,4ch

int 21h

delay proc

mov cx,3000

lop1: mov bx,2000

lop2: dec bx

jnz lop2

loop lop1

ret

delay endp

code ends

end start

15：在使用8个开关控制8个LED的实验中，请利用8255的A口 作为输入端口，C口作为输出端口实现原来的实验现象。

code segment

assume cs:code

start: mov dx,283h

mov al,90h

out dx,al

lop: mov dx,280h

in al,dx

mov dx,282h

out dx,al

mov ah,06h

mov dl,0ffh

int 21h

jz lop

mov ah,4ch

int 21h

code ends

end start

16：在交通灯实验中，请使用8255的C口 按位输出，置1/置0 的功能实现如下现象：南北路口的红灯、东西路口的绿灯同时亮30秒左右。

code segment

assume cs:code

start:

mov dx,283h

mov al,80h

out dx,al

mov al,00001111b

out dx,al

mov al,00000001b

out dx,al

mov cx,20000

k2: mov bx,9000

k1: dec bx

jnz k1

loop k2

mov ah,4ch

int 21h

code ends

end start

17：在交通灯实验中，请使用8255的C口 按位输出，置1/置0 的功能实现如下现象：南北路口的黄灯闪烁5次。

code segment

assume cs:code

start: mov di,5

mov dx,283h

mov al,80h

out dx,al

lop: mov al,00001101b

out dx,al

mov cx,2000

k2: mov bx,3000

k1: dec bx

jnz k1

loop k2

mov al,00001100b

out dx,al

mov cx,2000

k3: mov bx,3000

k4: dec bx

jnz k4

loop k3

dec di

jnz lop

mov ah,4ch

int 21h

code ends

end start

18: 在模/数转换器实验中，实现以下条件下的A/D转换，模拟量的输入通道：IN1；A/D转换器的地址：2B8H；显示结果中不出现大写字母。（此实验未经证实）

code segment

assume cs:code

start: nop

lop: mov dx,2B9h

out dx,al

mov cx,0ffh

delay: loop delay

in al,dx ;4c

mov bl,al

mov cl,4

shr al,cl ;04

call disp

mov al,bl

and al,0fh

call disp

mov dl,20h

mov ah,02h

int 21h

int 21h

mov ah,06h

mov dl,0ffh

int 21h

jz lop

mov ah,4ch

int 21h

disp proc

mov dl,al

cmp dl,9

jbe next

mov ah,02h

int 21h

ret

disp endp

code ends

end start

19:利用可编程计数定时器8253A的计数器0和计数器2，输出100Hz的的信号，连接必要的连线，编写初始化程序。上机调试出程序，并将程序记录下来。

code segment

assume cs:code

start: mov dx,283h

mov al,00010110b

out dx,al

mov al,100

mov dx,280h

out dx,al

mov dx,283h

mov al,10010110b

out dx,al

mov al,100

mov dx,282h

out dx,al

mov ah,4ch

int 21h

code ends

end start

20:利用可编程计数定时器8253A的计数器1和计数器2，输出50Hz的的信号，连接必要的连线，编写初始化程序。上机调试出程序，并将程序记录下来。

code segment

assume cs:code

start: mov dx,283h

mov al,01010110b

out dx,al

mov al,200

mov dx,281h

out dx,al

mov dx,283h

mov al,10010110b

out dx,al

mov al,100

mov dx,282h

out dx,al

mov al,ah

out dx,al

mov ah,4ch

int 21h

code ends

end start

e21.txt

;21:用A命令汇编一条INT 21H 指令，用命令T单步执行该指令， 比较指令执行前后CS和IP、堆栈指针SP及堆栈内容变化情况。

;此题见软件实验一的第五题

*********************************

e22.txt

;22:用命令A汇编下列程序段，用命令T 跟踪执行，判断程序段能否完成指定功能。

;程序段完成将DS:2000H开始的 5 个字节内存内容相加，

;并把相加的结果存放在DS:2005H 和 DS:2006H 内存单元中，注意：要考虑进位。

;修改后的程序如下，程序主要错误：没有考虑最高位进位

MOV CX,5

MOV AX,0

MOV BX,2000H

INC BX

;DEC CX

JNC next1

inc ah

next1: LOOP next ; (CX)-1－>(CX), (CX)≠0转next

MOV [BX],AL

inc bx

mov [bx],ah

*********************************

e23.txt

;23:编写完整的汇编语言程序，实现两个双字的加法，

;假设第一个操作数是10008423H，放在2000H处，

;第二个操作数是2007F00H，放在了3000H处。

;本程序将结果高位放在了CX，低位放在了DX

;10008423h+2007f00h=12010323h

data segment

n db 2000h dup(?) ;为将加数放在2000H，凑出的数

m db 0ffch dup(?) ;原因类似于上一个

data ends

code segment

assume cs:code,ds:data

start: mov ax,data

mov ds,ax

mov ax,ds:[2000h];直接寻址

mov bx,ds:[3000h]

mov dx,ax

mov ax,ds:[2002h]

mov bx,ds:[3002h]

mov cx,ax

mov ah,4ch

int 21h

code ends

end start

*********************************

e24.txt

;24:编写完整的汇编语言程序，

;实现：把“Hello,Liaocheng University”传送到另外一个段的内存单元处，

;注意：不准使用mov sb/mov sw指令。

data1 segment

lcu db 'Hello, liaochengUniversity','\$' ;用\$作为结束的标志

data1 ends

data2 segment

lcu2 db ?

data2 ends

code segment

assume cs:code,ds:data1

start: mov ax,data1

mov ds,ax

lea si,lcu

lea di,lcu2

lop: mov al,[si]

cmp al,'\$'

je fin

mov es:[di],al

inc si

inc di

jmp lop

fin:

mov ah,4ch

int 21h

code ends

end start

*********************************

e25.txt

;25:用D命令查看中断向量表, 查找int 17h对应的中断向量，

17*4=5ch 020a:058b

d 0000:5c

e 0000:5c

78 56 34 12

*********************************

e26.txt

;26:编写完整的汇编语言程序，把内存3000H:2000H起30个字节数据传送到内存 2000H：1000H开始处。

;用MOV S（或者直接用MOV ）

code segment

assume cs:code

start: mov ax,3000h

mov ds,ax

mov ax,2000h

mov es,ax

mov cx,30

mov si,2000h

mov di,1000h

cld

rep mov sb

mov ah,4ch

int 21h

code ends

end start

*********************************

e27.txt

;27:编写完整的汇编语言程序，实现：显示字符串“Hello World!”,并利用debug跟踪该程序的执行过程。

;程序同31或者33

*********************************

e28.txt

;28:编写完整的汇编语言程序，

;实现子程序的功能演示

*********************************

e29.txt

;29:自编程序或者利用debug，

*********************************

e30.txt

;30:说明可读写内存RAM和只读内存ROM的区别,并利用debug演示

;软件第一个实验的第四题

1）DS：200~22FH和F000：200~22FH两内存块内容

2）用命令F将字符‘A’分别填入这两个内存块

*********************************

e31.txt

;31:编写完整的汇编语言程序，实现：显示字符串“Hello World!”，

;注意：不准使用AH=9的DOS系统功能调用，

;提示：可以使用AH=2的DOS系统功能调用（字符显示功能）。

data segment

string db 'Hello World!'

data ends

code segment

assume cs:code,ds:data

start: mov ax,data

mov ds,ax

mov cx,12

lea si,string

lop: mov dl,[si]

mov ah,02h

int 21h

inc si

loop lop

mov ah,4ch

int 21h

code ends

end start

*********************************

e32.txt

;32:判断指令正误,并且把错误的指令改正过来。

1)ROR AX,8 ;8>1,8>>cl

2)LEA DI,[AX] ;bx,bp,si,di

3)MOV DS,2010 ;段寄存器不能直接赋植立即数

4)PUSH AL ;十六位操作数

5)OUT A00,AL ;A00>ff,A00>>DX

6)MOV [BX],0 ;未指明立即数的类型

7)POP CS ;不能给CS赋值

8)XCHG AL,[SI] ;

9)XCHG [DI],[SI];不能两个同为内存操作数

10)MOV AL,[DX] ;同2

*********************************

e33.txt

;33:找出下列程序段的错误(不止一处)，并改正过来。

date segment

string db 'Hello, World !','\$';定义字符串

date ends

code segment

assume cs:code, ds:date

start: mov ax,date ;data->date

mov ds,ax

mov dx,offset string;str->string

mov ah,9 ;调用09字符串显示功能

int 21h ;21->21h

mov ah,4ch ;ax->ah

int 21h ;21->21h

code ends

end start

*********************************

e34.txt

;34:将ASCII码形式表示的各位转换成为16进制的数,并且把结果合并后放在BX中。

;ASCII码：31h,41h,32h,42h

data segment

nums db 31h,41h,32h,42h

data ends

code segment

assume cs:code,ds:data

start: mov ax,data

mov ds,ax

mov ch,4

lea si,nums

lop: mov al,[si]

mov ah,0

sub ax,30h

cmp ax,9

jbe con

sub ax,7

inc si

dec ch

jz fin

mov cl,4

shl dx,cl

jmp lop

fin: int 3 ;duan dian

mov ah,4ch

int 21h

code ends

end start

*********************************

e35.txt

;35:将16进制的数转换成为ASCII码,并且把结果显示出来。

;16进制数：1A2Bh

code segment

assume cs:code

start: mov bx,1A2Bh

mov ch,4

lop: mov cl,4

rol bx,cl

mov dl,bl

call disp

dec ch

jnz lop

mov ah,4ch

int 21h

disp proc

and dl,0fh

cmp dl,9

jbe next

mov ah,2

int 21h

ret

disp endp

code ends

end start

*********************************

e36.txt

;36:下列程序完成两个5位十进制数的加法，分别放在data1和data2的符号地址处，

;请找出如下程序的错误之处，并改正过来。

data segment

data1 db 08h,02h,03h,03h,02h

data2 db 03h,05h,01h,04h,05h

data ends

code segment

assume cs:code

start: mov ax,data

mov ds,ax

lea si,data1

mov di,offset data2;更改mov di,seg data2

mov cx,5

clc ;添加

p1: mov al,[si]

aaa

mov [si],al

inc di

inc si ;添加

loop p1 ;更改LOOP P2

mov ah,4ch

int 21h

code ends

end start

*********************************

e37.txt

;37:编写完整的汇编语言程序，实现：以二进制的形式显示BX寄存器的内容

code segment

assume cs:code

start: mov bx,1234h

mov cx,16

lop: shl bx,1

jc one

mov dl,30h

mov ah,02h

int 21h

jmp next

one: mov dl,31h

int 21h

next: loop lop

mov ah,4ch

int 21h

code ends

end start

*********************************

e38.txt

;38:编写完整的汇编语言程序，实现：从键盘输入4个字符。

data segment

max db 5

m db 6 dup(?)

n db 23,32,56 ;用户自定义，确保输入的四个数不会覆盖掉已存在的数

data ends

code segment

assume cs:code,ds:data

start: mov ax,data

mov ds,ax

lea dx,max

mov ah,0ah

int 21h

mov ah,4ch

int 21h

code ends

end start

*********************************

e39.txt

;39:编写完整的汇编语言程序，实现：以十六进制的形式显示BX寄存器的内容

code segment

assume cs:code

start: mov bx,12abh

mov ch,4

lop: mov cl,4

rol bx,cl

mov dl,bl

call disp

dec ch

jnz lop

mov ah,4ch

int 21h

disp proc

and dl,0fh

cmp dl,9

jbe next

mov ah,2

int 21h

ret

disp endp

code ends

end start

*********************************

e40.txt

;40:编写完整的汇编语言程序，实现：小写字母a,b,c,d到A,B,C,D的转换

data segment

res db 61h,62h,63h,64h ;小写字母的ASCII码

data ends

code segment

assume cs:code

start: mov ax,data

mov ds,ax

lea si,res

mov cx,4

lop: sub byte ptr [si],20h

inc si

loop lop

mov ah,4ch

int 21h

code ends

end start

• 发表于:
• 原文链接https://kuaibao.qq.com/s/20181208G1C4FV00?refer=cp_1026
• 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号（企鹅号）传播渠道之一，根据《腾讯内容开放平台服务协议》转载发布内容。
• 如有侵权，请联系 cloudcommunity@tencent.com 删除。

2022-11-27

2018-04-24

2022-11-27

2022-11-27

2022-11-27

2022-11-27

2022-11-27