一、实验目的
1. 掌握不同进制数及编码相互转换的程序设计方法。
2. 掌握运算类指令编程及调试方法。
3. 掌握循环程序的设计方法。
二、实验内容
1. 重复从键盘输入不超过5位的十进制数,按回车键结束输入;
2. 将该十进制数转换成二进制数;结果以2进制数的形式显示在屏幕上;
3. 如果输入非数字字符,则报告出错信息,重新输入;
4. 直到输入“Q”或‘q’时程序运行结束。
5. 键盘输入一字符串,以空格结束,统计其中数字字符的个数,在屏幕显示
三、实验原理
十进制数可以表示为:Dn*10n+Dn-1*10n-1+…+D0*100= Di*10i
其中Di代表十进制数1、2、3、…、9、0。
上式可以转换为: Di*10i=(((Dn*10+Dn-1)*10+ Dn-2)*10+…+ D1)*10+ D0
由上式可归纳出十进制数转换为二进制数的方法:从十进制数的最高位Dn开始做乘10加次位的操作,依此类推,则可求出二进制数结果。
十进制ASCII码转换为二进制数流程图
- 实验设备
PC机一台
- 源码
实验内容(1)(2)(3)(4):
data segment
tip db 'Please press a number (enter Enter to input, enter q or Q to quit):$'
errorinfo db 'Please press numbers!$'
decimal dw 0
data ends
code segment
start:
mov ax, data
mov ds, ax
mov es, ax
mov ah,9
lea dx,tip
int 21h
;换行
mov ah,2
mov dl,0Ah
int 21h
mov dl,0Dh
int 21h
read:
mov ah,1
int 21h
;比较
cmp al,'q'
je quit
cmp al,'Q'
je quit
cmp al,0Dh
je output
cmp al,'0'
jb error
cmp al,'9'
ja error
;累加十进制数
sub al,'0'
mov bl,al
mov ax,0Ah
mul decimal ;由于大小限制,此处乘积仅取AX即可
mov decimal,ax
xor bh,bh
add decimal,bx
jmp read
output:
mov bx,decimal
;换行
mov ah,2
mov dl,0Ah
int 21h
mov dl,0Dh
int 21h
mov cx,10h ;16位二进制
bit:
test bx,8000h
jz set0
set1:
mov dl,'1'
jmp print
set0:
mov dl,'0'
print:
mov ah,2
int 21h
shl bx,1
loop bit
;代表二进制的b
mov ah,2
mov dl,'b'
int 21h
;清零
mov decimal,0
;换行
mov dl,0Ah
int 21h
mov dl,0Dh
int 21h
jmp read
error:
;换行
mov ah,2
mov dl,0Ah
int 21h
mov dl,0Dh
int 21h
mov ah,9
lea dx,errorinfo
int 21h
;换行
mov ah,2
mov dl,0Ah
int 21h
mov dl,0Dh
int 21h
;清零
mov decimal,0
jmp read
quit:
;退出程序
mov ax, 4c00h
int 21h
code ends
end start
实验内容(5):
data segment
tip db "Press a string to count(enter q or Q to quit):$"
counttext db "count:$"
result db 0
ends
stack segment
dw 64 dup(0)
stack ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
mov ah,9
lea dx,tip
int 21h
;换行
mov ah,2
mov dl,0Ah
int 21h
mov dl,0Dh
int 21h
mov cx,0 ;计数器清零
read:
mov ah,1
int 21h
;比较
cmp al,'q'
je quit
cmp al,'Q'
je quit
cmp al,' '
je count
cmp al,'0'
jb nonNumber
cmp al,'9'
ja nonNumber
inc cx
nonNumber:
jmp read
count:
;换行
mov ah,2
mov dl,0Ah
int 21h
mov dl,0Dh
int 21h
xor bx,bx ;十进制数位数
pushstack:
mov ax,cx
mov dl,0Ah
div dl
xor ch,ch
mov cl,al
add ah,'0'
push ax
inc bx
cmp cx,0
jne pushstack
;输出count:
mov ah,9
lea dx,counttext
int 21h
mov ah,2
mov cx,bx
output:
pop dx
mov dl,dh
int 21h
loop output
;清零
xor cx,cx
;换行
mov dl,0Ah
int 21h
mov dl,0Dh
int 21h
jmp read
quit:
mov ax, 4c00h
int 21h
ends
end start
六、实验结果
文章出处登录后可见!
已经登录?立即刷新