当前位置:网站首页>第五章 习题(124、678、15、19、22)【微机原理】【习题】
第五章 习题(124、678、15、19、22)【微机原理】【习题】
2022-06-25 22:02:00 【日星月云】
前言
以下内容源自微型计算机原理(第四版)王忠民主编
仅供学习交流使用
请您阅读文章声明,默认同意该声明
习题
1
1 画图说明下列语句所分配的存储空间及初始化的数据值。
(1) BYTE_VAR DB 'BYTE’, 12,-12H,3 DUP(0,7,2DUP(1,2),7)
(2) WORD_ VAR DW 5 DUP(0,1,2),7,-5, ‘BY’, ‘TE’, 256H
1.asm
data segment
BYTE_VAR DB 'BYTE',12,-12H,3 DUP(0,7,2 DUP(1,2),7)
org 40h
WORD_VAR DW 5 DUP(0,1,2),7,-5,'BY','TE',256H
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov ah,4ch
int 21h
code ends
end start
2
假设程序中的数据定义如下:
PARTNO DW ?
PNAME DB 16 DUP(?)
COUNT DD ?
PLENTH EQU $-PARTNO;16h=22
则PLENTH的值为多少?它表示什么意义?
PLENTH的值为0016h=22,它表示当前已分配单元空间个数;
PARTNO 2
PNAME 16
COUNT 4
2.asm
data segment
PARTNO DW ?
PNAME DB 16 DUP(?)
COUNT DD ?
PLENTH EQU $-PARTNO
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov ax,PLENTH
mov ah,4ch
int 21h
code ends
end start
4
4.假设程序中的数据定义如下
LNAME DB 30 DUP(?)
ADDRESS DB 30 DUP(?)
CITY DB 15 DUP(?)
CODE_LIST DB 1,7,8,3,2
(1)用一条MOV指令将LNAME的偏移地址放入BX。
(2)用一条指令将CODE_LIST的头两个字节的内容放入SI。
(3)写一条伪指令定义符使CODB_LENGHT的值等于CODE_LIST域的实际长度。
4.asm
data segment
LNAME DB 30 DUP(?)
ADDRESS DB 30 DUP(?)
CITY DB 15 DUP(?)
CODE_LIST DB 1,7,8,3,2
;(3)写一条伪指令定义符使CODB_LENGHT的值等于CODE_LIST域的实际长度。
CODB_LENGHT EQU $-CODE_LIST
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
;验证(3)
mov ax,CODB_LENGHT
;(1)用一条MOV指令将LNAME的偏移地址放入BX。
mov bx,offset LNAME
;(2)用一条指令将CODE_LIST的头两个字节的内容放入SI。
mov si,WORD PTR CODE_LIST
mov ah,4ch
int 21h
code ends
end start
6
6.对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么?
FLDB DB?
TABLEA DW 20DUP(?)
TABLEB DB ‘ABCD'
(1) MOV AX, TYPE FLDB ;(AX)=1
(2) MOV AX, TYPE TABLEA ;(AX)=2
(3) MOV CX, LENGTH TABLEA ;(CX)=20
(4) MOV DX, SIZE TABLEA ;(DX)=40
(5) MOV CX, LENGTH TABLEB ;(CX)=1;未用DUP
6.asm
data segment
FLDB DB ?
TABLEA DW 20 DUP(?)
TABLEB DB 'ABCD'
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
MOV AX, TYPE FLDB ;(AX)=1
MOV AX, TYPE TABLEA ;(AX)=2
MOV CX, LENGTH TABLEA ;(CX)=20
MOV DX, SIZE TABLEA ;(DX)=40
MOV CX, LENGTH TABLEB ;(CX)=1;未用DUP
mov ah,4ch
int 21h
code ends
end start
7
7.试说明下述指令中哪些需要加上PTR伪指令定义符
BVAL DB 10H,20H
WVAL DW 1000H
(1) MOV AL, BVAL
(2) MOV DL, [BX]
(3) SUB [BX],2
(4) MOV CL,WVAL
7.asm
data segment
BVAL DB 10H,20H
WVAL DW 1000H
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
MOV AL,BVAL
MOV DL,[BX]
SUB [BX],BYTE PTR 2
MOV CL,BYTE PTR WVAL
mov ah,4ch
int 21h
code ends
end start
8
8.编写一宏定义BXCHG,将一字节的高4位与低4位交换。
data segment
NUM1 DB 12H;-->21
NUM2 DB 34H;-->43
NUM3 DB 56H;-->65
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
BXCHG MACRO NUM
mov cl,4
rol NUM,cl;循环左移4位
ENDM
BXCHG NUM1
BXCHG NUM2
BXCHG NUM3
mov ah,4ch
int 21h
code ends
end start
15
15.试编写一汇编语言程序,要求从键盘接收一个4位的十六进制数,并在终端上显
示与它等值的二进制数。
非16进制字符按0处理
data segment
INF1 DB "Please input a hex mumber :$"
INF2 DB 0AH,0DH,"$"
INF3 DB " $"
org 60H
IBUF DB 7,0,6 DUP('$')
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
;输出INFO
PINF MACRO INF
MOV DX,OFFSET INF
MOV AH,09H
INT 21H
ENDM
;取出每一位并输出
QUWEI MACRO NUM
MOV CX,4
SHL NUM,CL;要左移四位到有效数字,0f->f0
LOOP1:
SHL NUM,1
JC P1
JNC P0
P1:
PUSH DX;MOV DL,'1'会改变
MOV AH,2
MOV DL,'1'
int 21h
POP DX
JMP END1
P0:
PUSH DX
MOV AH,2
MOV DL,'0'
int 21h
POP DX
JMP END1
END1:
NOP
LOOP LOOP1
ENDM
;输出BUF
PBUF MACRO BUF
MOV CX,0
MOV CL,[BUF+1]
LEA BX, BUF+2
LOOP3:
PUSH CX;QUWEI DL;会改变CX
;MOV DL,[BX]
;ADD DL,30H
;MOV AH, 02H
;INT 21H
MOV DL,[BX]
QUWEI DL
INC BX
POP CX
PINF INF3;每转一位16进制变成4位2进制来个空格
LOOP LOOP3
ENDM
;输入--》BUF
STORE MACRO BUF
MOV DX, OFFSET IBUF ;键入一个十六进制数
MOV AH,0AH
INT 21H
ENDM
PINF INF1
CALL HTB
PINF INF2
PBUF IBUF
mov ah,4ch
int 21h
;DTB改写HTB
;MOV DX,10-->MOV DX,16
HTB PROC NEAR
STORE IBUF
MOV CL,IBUF+1;十进制数的位数送CX
MOV CH,0
MOV SI,OFFSET IBUF+2;指向输入的第一个字符(最高位)
MOV AX,0 ;开始将十进制数转换为二进制数
AGAIN:
;MOV DX,10;((0x10+a4)x10+...)x10+a0
MOV DX,16;((0x16+a4)x16+...)x16+a0
MUL DX
;AND BYTE PTR [SI],0FH;十进制可以转数字
;16进制要改一下
CMP BYTE PTR [SI],'0'
JB OTHER
CMP BYTE PTR [SI],'9'
JBE DIGIT
CMP BYTE PTR [SI],'A'
JB OTHER
CMP BYTE PTR [SI],'F'
JBE UPPER
CMP BYTE PTR [SI],'a'
JB OTHER
CMP BYTE PTR [SI],'f'
JBE LOWER
JMP PEND
LOWER:
;小写字母a->10
SUB BYTE PTR [SI],'a'
ADD BYTE PTR [SI],10
JMP PEND;注意执行完一个分支后应使程序跳出
UPPER:
;大写字母A->10
SUB BYTE PTR [SI],'A'
ADD BYTE PTR [SI],10
JMP PEND
DIGIT:
AND BYTE PTR [SI],0FH;数字的情况
JMP PEND
OTHER:
AND BYTE PTR [SI],0H;输入非16进制字符按0处理
JMP PEND
PEND:
ADD AL, [SI]
ADC AH,0
INC SI
LOOP AGAIN
RET
HTB ENDP
code ends
end start
19
19.从键盘输入一系列字符(以回车符结束),并按字母、数字及其他字符分类计数,最
后显示出这三类的计数结果。
19.asm
data segment
INF1 DB "Please input a string :$"
INF2 DB 0AH,0DH,"$"
INF3 DB " $"
org 40H
CNTN DB 0 ;数字个数
CNTC DB 0 ;字母个数
CNTO DB 0 ;其他个数
org 60H
IBUF DB 255,0,254 DUP('$')
OBUF DB 7,0,6 DUP('$')
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
;输出INFO
PINF MACRO INF
MOV DX,OFFSET INF
MOV AH,09H
INT 21H
ENDM
;输入--》BUF
STORE MACRO BUF
MOV DX, OFFSET IBUF ;键入一个十六进制数
MOV AH,0AH
INT 21H
ENDM
;输出BUF
PBUF MACRO BUF
MOV CX,0
MOV CL,[BUF+1]
LEA BX, BUF+2
LOOP3:
MOV DL,[BX]
ADD DL,30H
MOV AH, 02H
INT 21H
INC BX
LOOP LOOP3
ENDM
;统计
CNT MACRO
STORE IBUF
MOV CL,IBUF+1;十进制数的位数送CX
MOV CH,0
MOV SI,OFFSET IBUF+2;指向输入的第一个字符(最高位)
MOV AX,0 ;开始将十进制数转换为二进制数
AGAIN:
CMP BYTE PTR [SI],'0'
JB OTHER
CMP BYTE PTR [SI],'9'
JBE DIGIT
CMP BYTE PTR [SI],'A'
JB OTHER
CMP BYTE PTR [SI],'Z'
JBE UPPER
CMP BYTE PTR [SI],'a'
JB OTHER
CMP BYTE PTR [SI],'z'
JBE LOWER
CMP BYTE PTR [SI],'z'
JA OTHER
JMP PEND
LOWER:
INC CNTC
JMP PEND;注意执行完一个分支后应使程序跳出
UPPER:
INC CNTC
JMP PEND
DIGIT:
INC CNTN
JMP PEND
OTHER:
INC CNTO
JMP PEND
PEND:
ADD AL, [SI]
ADC AH,0
INC SI
LOOP AGAIN
ENDM
;AL->BCD;压缩性
HTBCD MACRO
mov ah,0
mov cl,4
push ax
shr al,cl
mov bl,16h
mul bl
pop bx
and bl,0fh
add al,bl
daa
ENDM
;输出BCD码;AL压缩性
PBCD MACRO
mov ah,0
mov cl,4
push ax
shr al,cl
mov bh,al ;al高位
pop ax
and al,0fh ;al低位
mov ah,bh ;al高位
push ax
mov dl,ah
add dl,30h
mov ah,2
int 21h
pop ax
push ax
mov dl,al
add dl,30h
mov ah,2
int 21h
pop ax
ENDM
PINF INF1
CNT
PINF INF2
mov ax,0
mov al,CNTN
HTBCD
PBCD
PINF INF3
mov al,CNTC
HTBCD
PBCD
PINF INF3
mov al,CNTO
HTBCD
PBCD
mov ah,4ch
int 21h
code ends
end start
22
22.编写求两个4位非压缩BCD数之和,将和送显示器显示的程序。
22.asm
data segment
INF1 DB "RESULT:$"
INF2 DB 0AH,0DH,"$"
INF3 DB " $"
org 20H
STRING1 DW 0001H
STRING2 DW 0019H
D DB 0h ;0h
SUM DW 0H ;0020h
;STRING1 DW 0001H
;STRING2 DW 0099H
;D DB 0h ;0h
;SUM DW 0H ;0100h
;STRING1 DW 0001H
;STRING2 DW 9999H
;D DB 0h ;1h
;SUM DW 0H;0020h ;0000h
org 60H
IBUF DB 255,0,254 DUP('$')
OBUF DB 7,0,6 DUP('$')
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
;输出INFO
PINF MACRO INF
MOV DX,OFFSET INF
MOV AH,09H
INT 21H
ENDM
;输入--》BUF
STORE MACRO BUF
MOV DX, OFFSET IBUF ;键入一个十六进制数
MOV AH,0AH
INT 21H
ENDM
;取出bx:BCD数每一位并输出
QUWEI MACRO
PUSH BX
MOV CX,12
SHR BX,CL
MOV DL,BL
ADD DL,30H
MOV AH,02H
int 21h
POP BX
PUSH BX
MOV CX,8
SHR BX,CL
AND BX,0FH
MOV DL,BL
ADD DL,30H
MOV AH,02H
int 21h
POP BX
PUSH BX
MOV CX,4
SHR BX,CL
AND BX,0FH
MOV DL,BL
ADD DL,30H
MOV AH,02H
int 21h
POP BX
PUSH BX
AND BX,0FH
MOV DL,BL
ADD DL,30H
MOV AH,02H
int 21h
POP BX
ENDM
PINF INF1
PINF INF2
;计算
;ax,bx代表数字
;cl,表示al+bl的进位
;ch,表示ah+bh的进位
mov ax,STRING1
mov bx,STRING2
mov cx,0
push ax
add al,bl
daa
adc cl,0
mov dx,ax
pop ax
;需加低位的进位
add ah,cl
add ah,bh
mov al,ah
daa
adc ch,0
mov dh,al
;结果为 ch ,dx
mov D,ch
mov SUM,dx
;显示
mov dl,D
add dl,30H
mov ah,2
int 21h
mov bx,sum
QUWEI
mov ah,4ch
int 21h
code ends
end start
简化QUWEI
data segment
INF1 DB "RESULT:$"
INF2 DB 0AH,0DH,"$"
INF3 DB " $"
org 20H
STRING1 DW 0001H
STRING2 DW 0019H
D DB 0h ;0h
SUM DW 0H ;0020h
;STRING1 DW 0001H
;STRING2 DW 0099H
;D DB 0h ;0h
;SUM DW 0H ;0100h
;STRING1 DW 0001H
;STRING2 DW 9999H
;D DB 0h ;1h
;SUM DW 0H;0020h ;0000h
org 60H
IBUF DB 255,0,254 DUP('$')
OBUF DB 7,0,6 DUP('$')
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
;输出INFO
PINF MACRO INF
MOV DX,OFFSET INF
MOV AH,09H
INT 21H
ENDM
;输入--》BUF
STORE MACRO BUF
MOV DX, OFFSET IBUF ;键入一个十六进制数
MOV AH,0AH
INT 21H
ENDM
PDL MACRO
ADD DL,30H
MOV AH,02H
int 21h
ENDM
;取出bx:BCD数每一位并输出
QUWEI MACRO
LOCAL NEXT
MOV CX,12
;CX=12,8,4
NEXT:
PUSH BX
SHR BX,CL
MOV DL,BL
PDL
POP BX
SUB CX,4
JNZ NEXT
;CX=0
AND BX,0FH
MOV DL,BL
PDL
ENDM
PINF INF1
PINF INF2
;计算
;ax,bx代表数字
;cl,表示al+bl的进位
;ch,表示ah+bh的进位
mov ax,STRING1
mov bx,STRING2
mov cx,0
push ax
add al,bl
daa
adc cl,0
mov dx,ax
pop ax
;需加低位的进位
add ah,cl
add ah,bh
mov al,ah
daa
adc ch,0
mov dh,al
;结果为 ch ,dx
mov D,ch
mov SUM,dx
;显示
mov dl,D
PDL
mov bx,sum
QUWEI
mov ah,4ch
int 21h
code ends
end start
最后
请您阅读文章声明,默认同意该声明
打赏通道
边栏推荐
- Qt Utf8 与 Unicode 编码的互相转换, Unicode编码输出为格式为 &#xXXXX
- 统计字符串中不同回文子序列的个数
- C1. k-LCM (easy version)-Codeforces Round #708 (Div. 2)
- Informatics Orsay all in one 1353: expression bracket matching | Luogu p1739 expression bracket matching
- How to add cartoon characters to the blog park?
- [Axi] interpretation of Axi protocol disorder mechanism
- CTS RTS RX TX in serial port flow control UART (direct communication between serial port module and MCU)
- 漏刻有时API接口实战开发系列(13):小鹅通云服务PHP-API二维数组传参解决方案
- Comp2913 database
- character string
猜你喜欢
How to use drawing comparison function in CAD
Idea FAQ collection
字符串
CSDN add on page Jump and off page specified paragraph jump
BI-SQL丨存储过程(一)
Idea shortcut
#23class介绍
[untitled] open an item connection. If it cannot be displayed normally, Ping the IP address
The software test interview has been suspended. The interviewer always says that the logical thinking is chaotic. What should I do?
提取系统apk
随机推荐
Analysis on the control condition and mode of go cooperation overtime exit
hiberate核心API/配置文件/一级缓存详解
OpenJudge NOI 2.1 15:Counterfeit Dollar
hiberate架构介绍及环境搭建(非常详细)
音频基础知识以及PCM转WAV
解决‘tuple‘ object has no attribute ‘lower‘
转载: QTableWidget详解(样式、右键菜单、表头塌陷、多选等)
RepOptimizer: 其实是RepVGG2
Pointer strengthening and improvement
漏刻有时API接口实战开发系列(13):小鹅通云服务PHP-API二维数组传参解决方案
解决TypeError: Unicode-objects must be encoded before hashing
Day3 data types and operators summary and job
Fegin client entry test
C language (I)
Qtcreator formatting code
What is Unified Extensible Firmware Interface (UEFI)?
18亿像素火星全景超高清NASA放出,非常震撼
Comp2913 database
Go语言逃逸分析全纪录
信息学奥赛一本通 1353:表达式括号匹配(stack) | 洛谷 P1739 表达式括号匹配