当前位置:   article > 正文

8086汇编语言(16位)键盘输入一串二进制数求其和,并将十进制结果显示在屏幕上_8086将数据显示在屏幕

8086将数据显示在屏幕

键盘输入一串二进制数1ah ,7ch,0bah,3ah,45h,63h求其和,并将十进制结果显示在屏幕上。 

编译环境:MASM 2012.5

整体思路:在读入字符串后对字符串进行处理,利用address存储每一个字符串的首地址,利用循环将字符串转为数字,随后将数字转为12位2进制数,方便求和,然后对每个数字进行累加求和,随后利用累除将数字分离出来并输出。

代码:

DATAS SEGMENT

    n1  db 13

        db ?

        db 13 dup(?)

    n2  db 13

        db ?

        db 13 dup(?)

    n3  db 13

        db ?

        db 13 dup(?)

    n4  db 13

        db ?

        db 13 dup(?)

    n5  db 13

        db ?

        db 13 dup(?)

    n6  db 13

        db ?

        db 13 dup(?)

    code_2 db 12 dup(0)

    address db 6 dup(?)

    mulnum dw 2048,1024,512,256,128,64,32,16,8,4,2,1

DATAS ENDS

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    mov ES,AX

    

    lea dx,n1

    mov ah,0AH

    int 21H

    lea di,address

    mov [di],dl

    inc di

    mov dl,0DH

    mov ah,02H

    int 21H

    mov dl,0AH

    mov ah,02H

    int 21H

    

    lea dx,n2

    mov ah,0AH

    int 21H

    mov [di],dl

    inc di

    mov dl,0DH

    mov ah,02H

    int 21H

    mov dl,0AH

    mov ah,02H

    int 21H

        

    lea dx,n3

    mov ah,0AH

    int 21H

    mov [di],dl

    inc di  

    mov dl,0DH

    mov ah,02H

    int 21H

    mov dl,0AH

    mov ah,02H

    int 21H

       

    lea dx,n4

    mov ah,0AH

    int 21H

    mov [di],dl

    inc di  

    mov dl,0DH

    mov ah,02H

    int 21H

    mov dl,0AH

    mov ah,02H

    int 21H

       

    lea dx,n5

    mov ah,0AH

    int 21H

    mov [di],dl

    inc di  

    mov dl,0DH

    mov ah,02H

    int 21H

    mov dl,0AH

    mov ah,02H

    int 21H

       

    lea dx,n6

    mov ah,0AH

    int 21H

    mov [di],dl

    inc di

    mov dl,0DH

    mov ah,02H

    int 21H

    mov dl,0AH

    mov ah,02H

    int 21H    

;转二进制数字

mov cx,6

mov ch,0

    mov ax,0

    mov bx,0

    mov dx,0

    lea si,address

turn_num:

push cx

mov al,[si]

mov di,ax

inc di ;di指向字符串长度

mov cl,[di] ;cx计数字符串长度

inc di ;di指向字符串首地址

  xunhuan1:

mov bl,[di]

sub bl,30H

mov [di],bl

inc di

loop xunhuan1

pop cx

inc si

loop turn_num

;补齐12位

mov cx,6

mov ch,0

    mov ax,0

    mov bx,0

    mov dx,0

    lea di,address

move_char:

push di

push cx

mov al,[di]

mov si,ax

inc si ;si指向字符串长度

mov cl,[si] ;cx计数字符串长度

mov ch,0

inc si ;si指向字符串首地址   

lea di,code_2 ;di指向code_2首地址

cmp cx,8

jne zhongji2 ;判断位数,位数为8补4个0,位数为12不补0

    add di,4

  zhongji2:

rep movsb

;转为16进制数

mov cx,12

mov ch,0

lea di,code_2 ;di指向code_2首地址

lea si,mulnum

  leijia:

    push bx

    mov bl,[di] ;bx存2进制数

    mov bh,0

    mov ax,[si] ;ax存2进制乘数

    mul bx

    pop bx

    add bx,ax ;累加结果在bx中

    inc di

    add si,2

    loop leijia

    

    pop cx

    pop di

    inc di

    loop move_char

  

   mov ax,0

   mov dx,0

shuchu:

;输出回车换行

mov dl,0DH

mov ah,02H

int 21H

mov dl,0AH

mov ah,02H

int 21H

;输出第1个数字

mov cx,4

mov ch,0

mov dh,bh

shr dh,cl ;得到高8位中的高位

and dh,0FH

cmp dh,09H

jbe shuzi1

ja  zimu1

shuzi1:

add dh,30H

jmp shuchu1

zimu1:

add dh,37H

jmp shuchu1

shuchu1:

mov dl,dh

mov ah,02H ;输出高8位中的高位

int 21H

;输出第2个数字

mov dh,bh

and dh,0FH ;得到高8位中的低位

cmp dh,09H

jbe shuzi2

ja  zimu2

shuzi2:

add dh,30H

jmp shuchu2

zimu2:

add dh,37H

jmp shuchu2

shuchu2:

mov dl,dh

mov ah,02H ;输出高8位中的低位

int 21H

;输出第3个数字

mov dl,bl

shr dl,cl ;得到低8位中的高位

and dl,0FH

cmp dl,09H

jbe shuzi3

ja  zimu3

shuzi3:

add dl,30H

jmp shuchu3

zimu3:

add dl,37H

jmp shuchu3

shuchu3:

mov ah,02H ;输出低8位中的高位

int 21H

;输出第4个数字

mov dl,bl

and dl,0FH ;得到低8位中的低位

cmp dl,09H

jbe shuzi4

ja  zimu4

shuzi4:

add dl,30H

jmp shuchu4

zimu4:

add dl,37H

jmp shuchu4

shuchu4:

mov ah,02H ;输出低8位中的低位

int 21H

mov dl,48H

mov ah,02H

int 21H    

    MOV AH,4CH

    INT 21H

CODES ENDS

    END START

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/80509
推荐阅读
相关标签
  

闽ICP备14008679号