单一传送指令:MOV-B/MOV-W/MOV-DW/将100传送到vw100中是否最终结果一样...
发布网友
发布时间:2024-10-19 15:11
我来回答
共2个回答
热心网友
时间:2024-11-05 10:09
我只能给你写主程序,其它的自己加吧。
第一题:先定义一个内存缓冲区,然后用dos功能调用
从键盘输入字符串到缓冲区。然后将缓冲区数据分类,
DL存小写字母个数,DH存数字个数,BH存其它字符个数。
BUFF DB 100 ;定义100字节缓冲区
DB ? ;系统填入实际输入字节数
DB 100 DUP(?)
MOV AX, DATA
MOV DS, AX
MOV DX, OFFSET BUFF
MOV AH, 0AH ;10号功能调用,从键盘
;输入字符,回车键结束。
INT 21H
MOV BX, DX
MOV CL, [BX+1]
LEA SI, OFFSET BUFF
ADD SI, 2
XOR BX, BX
XOR DX, DX
BEGIN:MOV AX, [SI]
CMP AX, 'z'
JA THREE
CMP AX, 'a'
JL TWO
INC DL
JMP NEXT
TWO: CMP AX, '9'
JA THREE
CMP AX, '0'
JL THREE
INC DH
JMP NEXT
THREE:INC BH
NEXT: INC SI
LOOP BEGIN
MOV AH, 2
INT 21H
MOV DL, 20H
INT 21H
MOV DL, DH
INT 21H
MOV DL, 20H
INT 21H
MOV DL, BH
INT 21H
第二题:先定义缓冲区存放结果,二进制转换为八进制
时,三位二进制为一位八进制,16位共6位;转16进制
时,4位二进制为一位16进制,共4位。显示要用ASCII码,
所以每一位占一个字节,共10个字节。所以至少定义10
字节的缓冲区。
BUFF DB 20 DUP(?) ;定义20字节缓冲区
MOV AX, DATA ;将数据装入AX
MOV DS, AX
LEA DI OFFSET BUFF ;DI指向缓冲区首字节
XOR BX, BX ;BX清零
MOV CL, 9 ;设置循环次序
ROL AX, 1 ;八进制首位转换
RCL BX, 1
JMP NEXT
BEGIN: XOR BX, BX ;八进制其它5位转换
PUSH CL
MOV CL, 3
ONE: ROL AX, 1
RCL BX, 1
LOOP ONE
POP CL
DEC CL
JMP NEXT
BEGIN2:XOR BX, BX ;16进制转换
PUSH CL
MOV CL, 4
TWO: ROL AX, 1
RCL BX, 1
LOOP TWO
POP CL
DEC CL
CMP CL, 0
JE NEXT2
NEXT: AND BX, 30H ;转ASCII码
MOV [DI],BX ;储存
INC DI
CMP CL, 4
JA BEGIN
JL BEGIN2
MOV [DI],20H
INC DI
JMP BEGIN2
NEXT2:MOV DX,OFFSET BUFF ;DX指向缓冲区首字节
MOV AH,9 ;9号功能调用
INT 21H
热心网友
时间:2024-11-05 10:06
xuexi