本文档为个人博客文档系统的备份版本、作者:小游、作者博客:点击访问
这里我为了方便大家就直接贴代码了
1. 在数据段预先存放16个十六进制的ASCII码,首地址为ASC。从键盘输入一位十六进制数到BX,用ASC[BX](寄存器相对寻址)寻址方式找到对应数位的ASCII码,并取出显示
data segment
asc db '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
;数据段定义,这里我们把这个16进制的ascii码全部存到db中去
;我们这里 给这个字符串取名为asc,db用于定义字节
data ends
; data ends 表示数据段结束
code segment
; assume 用于表示关联,这里我们code段与cs寄存器关联,data段与ds关联
assume cs:code,ds:data
; start是标号,表示程序开始执行
start:
; 先把data的值转移到ax中
mov ax,data
; 把ax寄存器的值转移到ds中
mov ds,ax
; 首先我们给ax的高位置为1
mov ah,1h
; 这个int表示调用dos系统的功能(在使用int21h功能的时候,必须给ah这个寄存器赋值,我们这里赋值1)
; 这个表示调用DOS 1h号功能:键盘输入并回显,输入的值进入al
int 21h
; 将al的值赋给bl
mov bl,al
; bx的h为置为0
mov bh,0
; 由于下面要与40h比较而cmp必须是高精度比较
; cmp是比较函数,比较的结果会影响ZF,SF ,
; 如果ZF=1则AX=BX
; 如果ZF=0则AX!=BX
; 如果SF=1则AX<BX
; 如果SF=0则AX>=BX
cmp bx,40h
; 由于A的ascii码是40h,小于则是数字,大于等于则是字母
; jns用于判断符号为不为1,如果不为1那么就跳转到test这段
; alp为alpha即字母SF=0未产生标志位则说明bx比A大是字母跳转到alp
jns alp
js num;否则跳转到num
num:sub bx,30h;bx为数字(因为数字0的ASCII为48,16进制为30,所以我们减去30)
jmp over ; 跳转到over函数
alp:sub bx,37h;减去37h则为数字
jmp over
over:mov cl,asc[bx];cl的值是对应数位的ascii码 这里我们给cl寄存器放入asc这个数组对应的字符串
mov dl,cl
mov ah,2 ;调用DOS 2h号回显功能,注意回显功能只能显示dl,所以我们需要把内容放到d1中
int 21h
; 4表示 异步通迅输出
mov ah,4ch
int 21h;结束
code ends
end start