资源描述
第一章
1.1 解:
五代,详细见书
1.2 解:
微型计算机:以大规模、超大规模集成电路为重要部件,以集成了计算机重要部件——控制器和运算器微解决器为核心,所构造出计算机系统 。
PC机:PC(Personal Computer)机就是面向个人单独使用一类微机 。
单片机:用于控制微解决器芯片,内部除CPU外还集成了计算机其她某些重要部件,如:ROM、RAM、定期器、并行接口、串行接口,有芯片还集成了A/D、D/A转换电路等。
数字信号解决器DSP:重要面向大流量数字信号实时解决,在宿主系统中充当数据解决中心,在网络通信、多媒体应用等领域正得到越来越多应用
1.3 解:
微机重要有存储器、I/O设备和I/O接口、CPU、系统总线、操作系统和应用软件构成,各某些功能如下:
CPU:统一协调和控制系统中各个部件
系统总线:传送信息
存储器:存储程序和数据
I/O设备:实现微机输入输出功能
I/O接口:I/O设备与CPU桥梁
操作系统:管理系统所有软硬件资源
1.4 解:
系统总线:传递信息一组公用导线,CPU通过它们与存储器和I/O设备进行信息互换 。
好处:组态灵活、扩展以便
三组信号线:数据总线、地址总线和控制总线 。
其使用特点是:在某一时刻,只能由一种总线主控设备来控制系统总线,只能有一种发送者向总线发送信号;但可以有各种设备从总线上同步获得信号。
1.5解:
(1)用于数值计算、数据解决及信息管理方向。采用通用微机,规定有较快工作速度、较高运算精度、较大内存容量和较完备输入输出设备,为顾客提供以便和谐操作界面和简便快捷维护、扩充手段。
(2)用于过程控制及嵌人应用方向。
采用控制类微机,规定能抵抗各种干扰、适应现场恶劣环境、保证长时间稳定地工作,规定其实时性要好、强调其体积要小、便携式应用强调其省电。
1.6 解:
1.7 解:
I/O通道:位于CPU和设备控制器之间,其目是承担某些本来由CPU解决I/O任务,从而把CPU从繁杂I/O任务中解脱出来。由10根信号线构成(A9-A0)。
1.8解:
BIOS:基本输入输出系统。
重要功能:用来驱动和管理诸如键盘、显示屏、打印机、磁盘、时钟、串行通信接口等基本输入输出设备
1.9 解:
基本RAM区:640KB
保存RAM区:128KB
扩展ROM区:128KB
基本ROM区:128KB
1.10 解:
(1)、数—用来直接表征量大小,涉及:定点数、浮点数。
(2)、码—用来指代某个事物或事物某种状态属性,涉及:二进制、八进制、十进制、十六进制。
区别:使用场合不同,详见P16.
1.11 解:
(1)
(2)
(3)
1.12 解:
原码 反码 补码
+37 00100101/25H 00100101/25H 00100101/25H
-37 10100101/A5H 11011010/DAH 11011011/DBH
1.13 解:
+37
-37
16位
32位
16位
32位
00 25H
00 00 00 25H
FF 5BH
FF FF FF 5BH
1.14 解:
无符号数:70D
补码有符号数:70D
BCD码:46D
ASCII:F
1.15 解:
1)、相加后若浮现和不不大于9,则将和减去10后再向高位进1
2)、若浮现组间进位,则将低位加6
1.16 解:
详见课本16页。
1.17 解:
C3 40 20 00
1.18 解:
50
50H
十进制值
50
80
二进制
十六进制
二进制
十六进制
0011 0010B
32H
0101 0000B
50H
1.19 解:
D:44H
d:64H
CR:0DH
LF:0AH
0:30H
SP:20H
NUL:00H
1.20 解:
国标码:36 50H
机内码:B6 B0H
第二章
2.1
算术逻辑单元ALU、寄存器组和控制器;
总线接口单元BIU:管理8088与系统总线接口负责cpu对接口和外设进行访问
执行单元EU:负责指令译码、执行和数据运算;
8位cpu在指令译码前必要等待取指令操作完毕,8088中需要译码指令已经取到了指令队列,不需要等待取指令。而取指令是cpu最为频繁操作,因而8088构造和操作方式节约了大量等待时间,比8位cpu节约了时间,提高了性能。
2.2
8个8位寄存器:AH、AL、BH、BL、CH、CL、DH、DL;
8个16位寄存器:累加器AX、基址寄存器BX、计数器CX、数据寄存器DX、源地址寄存器SI、目地址寄存器DI、基址指针BP、堆栈指针SP。
2.3
标志用于反映指令执行成果或者控制指令执行形式。
状态标志用于记录程序运营成果状态信息;控制标志用于控制指令执行形式。
2.4
例:有运算:3AH+7CH=B6H
作为无符号数运算,没有进位,CF=0;
作为有符号数运算,成果超过范畴,OF=1.
2.5
8088中每个存储单元有唯一20位地址,称为物理地址。解决器通过总线存取存储器数据时,采用这个物理地址。
在顾客编程过程中采用“段地址:偏移地址”形式称为逻辑地址。
将逻辑地址中段地址左移4位,加上偏移地址就得到物理地址。
1MB最多能提成65536个逻辑段。
2.6
代码段:存储程序指令序列;
堆栈段:拟定堆栈所在主存储区;
数据段:存储当前运营程序数据;
附加段:附加数据段,用于数据保存。此外串操作指令将其作为目操作数存储区。
2.7
8088存储空间分段管理,程序设计时采用逻辑地址。由于段地址在默认或指定段寄存器中,因此只需要偏移地址,称为有效地址EA.
操作数在主存中有如下几种寻址方式:直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址。
2.8
(1)及时数寻址 ax:1200H
(2)寄存器寻址 ax:0100H
(3)存储器直接寻址 ax:4C2AH
(4)寄存器间接寻址 ax:3412H
(5)寄存器间接寻址 ax:4C2AH
(6)基址变址寻址 ax:7856H
(7)相对基址变址寻址 ax:65B7H
2.9
(1)cx为字寄存器,dl为字节寄存器,类型不匹配。
(2)mov指令目操作数只能是寄存器或者主存单元,ip是指针。
(3)不容许及时数到段寄存器传送。
(4)不容许段寄存器之间直接传送。
(5)数据溢出。
(6)sp不能用于寄存器间接寻址。
(7)格式不对。应为:mov ax,[bx+di]
(8)mov指令操作数不能是及时数。
2.10
(1)bx得到table偏移地址,bx=200H.
(2)将及时数8送到al。
(3)换码,al=12H.
2.11
(1)al=89H
(2)al=12H,cf=1,zf=0,sf=0,of=1,pf=1
(3)al=0AFH,cf=0,zf=0,sf=1,of=0,pf=1
(4)al=0AFH,cf=1,zf=0,sf=1,of=1,pf=1
(5)al=0,cf=0,zf=1,sf=0,of=0,pf=1
(6)al=0FFH,cf=0,zf=0,sf=1,of=0,pf=1
(7)al=0,cf=0,zf=1,sf=0,of=0,pf=1
2.12
(1) add dx,bx
(2) add al,[bx+si]
(3) add word ptr[bx+0B2H],cx
(4) add word ptr[0520H],3412H
(5)add al,0A0H
2.13
运算公式:。商存储在ax,余数存储在dx。
2.14
(1)ax=1470H
(2)ax=1470H,cf=0,of=0,sf=0,zf=0,pf=0
(3)ax=1470H,cf=0,of=0,sf=0,zf=0,pf=0
(4)ax=0,cf=0,of=0,sf=0,zf=1,pf=1
(5)ax=0FFFFH,cf=0,of=0,sf=0,zf=1,pf=1
(6)ax=0FFFFH,cf=0,of=0,sf=1,zf=0,pf=1
2.15
相对寻址方式、直接寻址方式、间接寻址方式。
2.16
(1)1256H
(2)3280H
2.17
(1)ax=1E1EH
(2)alD0、D7位不全为0
(3)cx<64H
2.18
执行65536次。
2.19
功能:将数组中每个字元素相加,成果存储于total。
2.20
(1)lea si,string
Mov dh,[si]
Mov dl,[si+5]
(2)mov ax word ptr buffer1
Sub ax word ptr buffer2
Mov dx word ptr buffer1+2
Sbb dx word ptr buffer2+2
(3) test dx,0F000H
jz even
even:mov ax,0
(4) mov cx,4
again:sar dx,1
rcr ax,1
loop again
(5) mov cx,100
mov si,0
again:mov al,0FFH
add al,array[si]
mov array[si],al
inc si
loop again
2.21
Htoasc proc
Mov bl,al
Mov al,ah
Mov bh,10
Mul bh
And ax,00FFH
Add al,bl
Htoend:ret
Htoasc endp
2.22
计算机系统运用中断为顾客提供硬件设备驱动程序。在IBM-PC系列微机中,基本输入输出系统ROM-BIOS和DOS都提供了丰富中断服务程序,称为系统功能调用。
调用环节(1)AH中设立系统功能调用号
(2)在指定寄存器中设立入口参数
(3)使用中断调用指令执行功能调用
(4)依照出口参数分析调用状况
2.23
Htoasc proc
And al,0FH
Add al,90H
Daa
Adc al,40H
Daa
Mov ah,02H
Mov dl,al
Int 21H
Ret
Htoasc endp
2.24
Numout proc
Xor ah,ah
Aam
Add ax,3030H
Mov dl,ah
Mov ah,02H
Int 21H
Mov dl,al
Mov ah,02H
Int 31H
Ret
Numout endp
2.25
Msgkey db”input number 0-9”,”$”
Msgwrg db”error”,”$”
Mov ah,09H
Mov dx,offset msgkey
Int 21H
Again: mov ah,01H
Int 21H
Cmp al,30H
Jb disp
Cmp al,39H
Ja disp
Mov dl,al
Mov ah,02H
Int 21H
Jmp done
Disp: mov dx,offset msgwrg
Mov ah,09H
Int 21H
Jmp again
Done: mov ah,02H
Mov dl,al
Int 21H
第3章
3.1 解:
汇编语言是一种以解决器指令系统为基本低档程序设计语言,它采用助记符表达指令操作码,采用标记符号表达指令操作数,可以直接、有效地控制计算机硬件,因而容易创立代码序列短小、运营迅速可执行程序
3.2 解:
(1)完整汇编语言源程序由段构成
(2)一种汇编语言源程序可以包括若干个代码段、数据段、附加段或堆栈段,段与段之间顺序可随意排列
(3)需独立运营程序必要包括一种代码段,并批示程序执行起始点,一种程序只有一种起始点
(4)所有可执行性语句必要位于某一种代码段内,阐明性语句可依照需要位于任一段内
(5)普通,程序还需要一种堆栈段
3.3 解:
存储模式
特 点
TINY
COM类型程序,只有一种不大于64KB逻辑段(MASM 6.x支持)
SMALL
小应用程序,只有一种代码段和一种数据段(含堆栈段),每段不不不大于64KB
COMPACT
代码少、数据多程序,只有一种代码段,但有各种数据段
MEDIUM
代码多、数据少程序,可有各种代码段,只有一种数据段
LARGE
大应用程序,可有各种代码段和各种数据段(静态数据不大于64KB)
HUGE
更大应用程序,可有各种代码段和各种数据段(对静态数据没有限制)
FLAT
32位应用程序,运营在32位80x86CPU和Windows 9x或NT环境
3.4 解:
开始位置:用标号指明
返回DOS:运用DOS功能调用4CH子功能来实现
汇编停止:执行到一条END伪指令时,停止汇编
3.5 解:
段定位、段组合和段类型。
3.6 解:
stack segment stack
db 1024(0)
stack ends
data segment
string db 'Hello,Assembly!',0dH,0aH,‘$’
data ends
code segment 'code'
assume cs:code,ds:data,ss:stack
start: mov dx,offset string
mov ah,9
int 21h
code ends
end start
3.7 解:
(1). EXE程序
程序可以有各种代码段和各种数据段,程序长度可以超过64KB
普通生成EXE构造可执行程序
(2). COM程序
只有一种逻辑段,程序长度不超过64KB
需要满足一定条件才干生成COM构造可执行程序(MASM 6.x需要采用TINY模式)
3.8 解:
符号定义伪指令有“等价EQU”和“等号=”:
符号名 EQU 数值表达式
符号名 EQU <字符串>
符号名 = 数值表达式
EQU用于数值等价时不能重复定义符号名,但“=”容许有重复赋值。例如:
X= 7 ;等效于:X equ 7
X= X+5 ;“X EQU X+5”是错误
3.9 解:
(1) al=67h
(2) ax=133h,dx=4h
(3) ax=0230h
(4) al=41h
(4) ax=7654h
3.10 解:
(1)
41h
42h
43h
10
10h
45h
46h
-1
?
4
4
4
-1
?
4
4
4
-1
?
4
4
4
(2)
10h
00h
0fbh
0ffh
?
?
?
?
?
?
3.11 解:.data
my1b db 'Personal Computer'
my2b db 20
my3b db 14h
my4b db 00010100b
my5w dw 20 dup(?)
my6c = 100
my7c = <'Personal Computer'>
3.12 解:
运用定位伪指令控制,如org,even,align
3.13 解:
涉及逻辑地址和类型两种属性。
3.14 解:
;数据段
org 100h
varw dw 1234h , 5678h
varb db 3 , 4
vard dd 12345678h
buff dd 10 dup(?)
mess db 'Hello'
;代码段
mov ax , offset varb + offset mess
mov ax , type buff + type mess + type vard
mov ax , sizeof varw+ sizeof buff+ sizeof mess
mov ax , lengthof varw+ lengthof vard
3.15 解:
(1) 1000超过一种字节所能表达最大整数
(2)SI应为偶数
(3)两个内存单元不能直接运算
(4)应改为[al+1]
(5)条件转移指令背面应接标号,而不是变量
3.16 解:
mov ah,1 ;只容许输入小写字母
int 21h
sub al,20h ;转换为大写字母
mov dl,al
mov ah,2
int 21h ;显示
3.17 解:
mov bx,offset LEDtable
mov al,lednum
xlat
3.18 解:
mov ax,bufX
cmp ax,bufY
jae done
mov ax,bufY
done: mov bufZ,ax
3.19 解:
.model small
.stack
.data
bufX dw -7
signX db ?
.code
.startup
cmp bufX,0 ;test bufX,80h
jl next ;jnz next
mov signX,0
jmp done
next: mov signX,-1
done: .exit 0
end
3.20 解:
mov dl,’2’
mov ax,bufX
cmp ax,bufY
je next1
dec dl
next1: cmp ax,bufZ
je next2
dec dl
next2: mov ah,2
int 21h
3.21 解:
;代码段
mov al,number
mov bx,0 ;BX←记录为1位数
restart: cmp al,0 ;AL=0结束
jz done
again: shr al,1 ;最低位右移进入CF
jc next ;为1,转移
inc bx ;不为1,继续
jmp again
next: push ax
push bx
shl bx,1 ;位数乘以2(偏移地址要用2个字节单元)
jmp addrs[bx] ;间接转移:IP←[table+BX]
;如下是各个解决程序段
fun0: mov dl,'0'
jmp disp
fun1: mov dl,'1'
jmp disp
fun2: mov dl,'2'
jmp disp
fun3: mov dl,'3'
jmp disp
fun4: mov dl,'4'
jmp disp
fun5: mov dl,'5'
jmp disp
fun6: mov dl,'6'
jmp disp
fun7: mov dl,'7'
jmp disp
;
disp: mov ah,2 ;显示一种字符
int 21h
pop bx
pop ax
jmp restart
done: …
3.22 编制程序完毕12H、45H、0F3H、6AH、20H、0FEH、90H、0C8H、57H和34H等10个字节数据之和,并将成果存入字节变量SUM中(不考虑溢出和进位)。
;wjxt322.asm
.model small
.stack
.data
b_data db 12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34h ;原始数据
num equ 10 ;数据个数
sum db ? ;预留成果单元
.code
.startup
xor si,si ;位移量清零
xor al,al ;取第一种数
mov cx,num ;累加次数
again: add al,b_data[si] ;累加
inc si ;指向下一种数
loop again ;如未完,继续累加
mov sum,al ;完了,存成果
.exit 0
end
3.23 求主存0040h:0开始一种64KB物理段中共有多少个空格?
;wjxt323.asm
.model small
.code
start: mov ax,0040h ;送段地址
mov ds,ax
mov si,0 ;偏移地址
mov cx,si ;计数(循环次数)
xor ax,ax ;空格计数器清零
again: cmp byte ptr [si],20h ;与空格ASCII码比较
jne next ;不是空格,转
inc ax ;是空格,空格数加1
next: inc si ;修改地址指针
loop again ;cx=cx-1,如cx=0 退出循环
.exit 0
end start
3.24 编写计算100个16位正整数之和程序。如果和不超过16位字范畴(65535),则保存其和到wordsum,如超过则显示‘overflow’。
答:
;数据段
count equ 100
parray dw count dup(?) ;假设有100个数据
wordsum dw 0
msg db ‘overflow’,’$’
;代码段
mov cx,count
mov ax,0
mov bx,offset parray
again: add ax,[bx]
jnc next
mov dx,offset msg
mov ah,9
int 21h ;显示溢出信息
jmp done ;然后,跳出循环体
next: add bx,2
loop again
mov wordsum,ax
done: …
3.25 编程把—个16位无符号二进制数转换成为用8421BCD码表达5位十进制数。转换算法可以是:用二进制数除以10000,商为“万位”,再用余数除以1000,得到“千位”;依次用余数除以l00、10和l,得到“百位”、“十位”和“个位”。
;wjxt325.asm
.model small
.stack 256
.data
array dw ? ;源字数据
dbcd db 5 dup(?) ;五位bcd成果,高对高低对低
.code
.startup
mov dx,array ;取源数据(余数)
mov bx,10000 ;除数
mov cx,10 ;除数系数
mov si,4 ;目数据高位位移量
again: mov ax,dx ;dx.ax中存储被除数
mov dx,0
div bx ;除于bx,商ax,余数dx
mov dbcd[si],al ;商<10,存成果
push dx ;暂存余数
mov ax,bx ;除数除于10
mov dx,0
div cx ;dx.ax除于cx,商ax、余数0存在dx
mov bx,ax ;bx是除数
pop dx
dec si ;目数据位移量减1
jnz again
mov dbcd,dl ;存个位数( < 10 )
.exit 0
end
3.26 解:
(1)汇编语言中,子程序要用一对过程伪指令PROC和ENDP声明,格式如下:
过程名 PROC [NEAR|FAR]
…… ;过程体
过程名 ENDP
(2)保护用到寄存器内容,以便子程序返回时进行相应恢复。
(3)改错:
crazy proc
pish bx
push cx
xor ax,ax
xor dx,dx
again:add a,[bx]
adc dx,0
inc bx
inc bx
loop again
pop cx
pop bx
3.27 解(不需调用HTOASC子程序):
again: mov ah,1
int 21h
cmp al,1bh ;ESCASCII码是1bh
je done
mov dl,al
mov ah,2
int 21h ;是大写字母则转换为小写字母
jmp again
done: …
3.28 解答:
asctob proc
push cx
and dh,0fh ;先转换十位数
shl dh,1 ;十位数乘以10(采用移位指令)
mov ch,dh
shl dh,1
shl dh,1
add dh,ch
and dl,0fh ;转换个位数
add dh,dl ;十位数加个位数
mov al,dh ;设立出口参数
pop cx
ret
asctob endp
3.29 解:
DIPASC proc ;入口参数:AL=要显示一种16进制数
push cx
push dx
push ax
mov cl,4 ;转换高位
shr al,cl
call HTOASC
mov dl,al ;显示
mov ah,2
int 21h
pop ax ;转换低位
call HTOASC
mov dl,al ;显示
mov ah,2
int 21h
mov dl,’H’ ;显示一种字母“H”
mov ah,2
int 21h
pop dx
pop cx
ret
DIPASC endp
HTOASC proc ;将AL低4位表达一位16进制数转换为ASCII码
and al,0fh
cmp al,9
jbe htoasc1
add al,37h ;是0AH~0FH,加37H转换为ASCII码
ret ;子程序返回
htoasc1: add al,30h ;是0~9,加30H转换为ASCII码
ret ;子程序返回
HTOASC endp
3.30 解:
lucase proc
push bx
mov bx,offset string
cmp al,0
je case0
cmp al,1
jz case1
cmp al,2
jz case2
jmp done
case0: cmp byte ptr [bx],0
je done
cmp byte ptr [bx],’A’
jb next0
cmp byte ptr [bx],’Z’
ja next0
add byte ptr [bx],20h
next0: inc bx
jmp case0
case1: cmp byte ptr [bx],0
je done
cmp byte ptr [bx],’a’
jb next1
cmp byte ptr [bx],’z’
ja next1
sub byte ptr [bx],20h
next1: inc bx
jmp case1
case2: cmp byte ptr [bx],0
je done
cmp byte ptr [bx],’A’
jb next2
cmp byte ptr [bx],’Z’
ja next20
add byte ptr [bx],20h
jmp next2
next20: cmp byte ptr [bx],’a’
jb next2
cmp byte ptr [bx],’z’
ja next2
sub byte ptr [bx],20h
next2: inc bx
jmp case2
done: pop bx
ret
lucase endp
3.31 解:
(1)用寄存器传递参数:
最简朴和惯用参数传递办法是通过寄存器,只要把参数存于商定寄存器中就可以了
由于通用寄存器个数有限,这种办法对少量数据可以直接传递数值,而对大量数据只能传递地址
采用寄存器传递参数,注意带有出口参数寄存器不能保护和恢复,带有入口参数寄存器可以保护、也可以不保护,但最佳可以保持一致
(2)用共享变量传递参数
子程序和主程序使用同一种变量名存取数据就是运用共享变量(全局变量)进行参数传递
如果变量定义和使用不在同一种源程序中,需要运用PUBLIC、EXTREN声明
如果主程序还要运用本来变量值,则需要保护和恢复
运用共享变量传递参数,子程序通用性较差,但特别适合在各种程序段间、特别在不同程序模块间传递数据
(3)用堆栈传递参数
参数传递还可以通过堆栈这个暂时存储区。主程序将入口参数压入堆栈,子程序从堆栈中取出参数;子程序将出口参数压入堆栈,主程序弹出堆栈获得它们
采用堆栈传递参数是程式化,它是编译程序解决参数传递、以及汇编语言与高档语言混合编程时常规办法
3.32 解:
办法:主程序将入口参数压入堆栈,子程序从堆栈中取出参数;子程序将出口参数压入堆栈,主程序弹出堆栈获得它们
注意:压栈与弹栈必要要一一相应。
3.33 解:
办法1:
neg32 proc ;入口参数:DX.AX=32位有符号数
neg ax ;实现0-DX.AX功能
neg dx
sbb dx,0 ;这条指令也可以用dec dx代替
ret
neg32 endp ;出口参数:DX.AX=32位有符号数补码
办法2:
neg32 proc ;入口参数:DX.AX=32位有符号数
not ax ;实现DX.AX求反加1
not dx
add ax,1
adc dx,0
ret
neg32 endp ;出口参数:DX.AX=32位有符号数补码
3.34 解:
;数据段
array db 12h,25h,0f0h,0a3h,3,68h,71h,0cah,0ffh,90h ;数组
count equ $-array ;数组元素个数
result db ? ;校验和
;代码段
mov bx,offset array ;BX←数组偏移地址
mov cx,count ;CX←数组元素个数
call checksum ;调用求和过程
mov result,al ;解决出口参数
mov ax,4c00h
int 21h
;计算字节校验和通用过程
;入口参数:DS:BX=数组段地址:偏移地址,CX=元素个数
;出口参数:AL=校验和
;阐明:除AX/BX/CX外,不影响其她寄存器
checksum proc
xor al,al ;累加器清0
sum: add al,[bx] ;求和
inc bx ;指向下一种字节
loop sum
ret
checksum endp
end
3.35 解:
⑴
.model small
.stack
.data
wdata dw 34abh
.code
.startup
mov ax,wdata
call dispa
.exit 0
;
dispa proc
push cx
push dx
mov cl,4
mov dl,ah
shr dl,cl
call dldisp
mov dl,ah
and dl,0fh
call dldisp
mov dl,al
shr dl,cl
call dldisp
mov dl,al
and dl,0fh
call dldisp
pop dx
pop cx
ret
dispa endp
;
dldisp proc
push ax
or dl,30h
cmp dl,39h
jbe dldisp1
add dl,7
dldisp1: mov ah,2
int 21h
pop ax
ret
dldisp endp
end
⑵
.model small
.stack
.data
wdata dw 34abh
wordtemp dw ?
.code
.startup
mov ax,wdata
mov wordtemp,ax
call dispa
.exit 0
;
dispa proc
push cx
push dx
mov cl,4
mov dl,byte ptr wordtemp+1
shr dl,cl
call dldisp
mov dl,byte ptr wordtemp+1
and dl,0fh
call dldisp
mov dl,byte ptr wordtemp
shr dl,cl
call dldisp
mov dl,byte ptr wordtemp
and dl,0fh
call dldisp
pop dx
pop cx
ret
dispa endp
;
dldisp proc
push ax
or dl,30h
cmp dl,39h
jbe dldisp1
展开阅读全文