实验二 数码转换实验

一、实验目的

    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

六、实验结果

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年12月5日
下一篇 2023年12月5日

相关推荐