赞
踩
键盘输入一串二进制数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
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。