求“从键盘上输入四位十进制数转化为十六进制数并在屏幕上显示这个十进制数”的汇编程序

作者&投稿:翟录 (若有异议请与网页底部的电邮联系)
键盘输入4位十进制数,求其补码并在屏幕上输出对应的十六进制数,用汇编语言完成程序设计,求指导。~

; 输入不超过65535的10进制数,将其以16位2进制数的形式 以及4位的16进制数形式显示补码 ; 负数本身用补码表示,再求补码即得 原码; 用 word 类型 表达的 4位 十进制均为正数,所以其补码即其自身。 CODE SEGMENT ASSUME CS:CODE X DW 0 MSG1 DB 13,10,'please input a number:','$' MSG2 DB 13,10,16 DUP(0),'B$' MSG3 DB 13,10,4 DUP(0),'H$' START: PUSH CS POP DS PUSH CS POP ES LEA DX,MSG1 MOV AH,9 INT 21H LEA BX,X MOV AX,0 PUSH AX AGAIN1: MOV AH,1 INT 21H CMP AL,13 JE LINE0 SUB AL,30H MOV AH,0 MOV SI,AX POP AX MOV CL,10 MOV CH,0 MUL CX ADD AX,SI PUSH AX JMP AGAIN1 LINE0: POP AX OR AX,AX JNS @0 NEG AX OR AX,8000H @0: MOV X,AX ;================= LEA DI,MSG2 INC DI INC DI MOV CX,16 MOV AX,X AGAIN2: ROL AX,1 JC @1 MOV BYTE PTR[DI],30H JMP @2 @1: MOV BYTE PTR[DI],31H @2: INC DI LOOP AGAIN2;==================================== LEA DI,MSG3 INC DI INC DI MOV CX,4 MOV AX,X AGAIN3: ROL AX,1 ROL AX,1 ROL AX,1 ROL AX,1 MOV DX,AX AND DX,0FH OR DL,30H CMP DL,39H JBE @3 ADD DL,7 @3: MOV BYTE PTR [DI],DL INC DI LOOP AGAIN3 ;============== LEA DX,MSG2 MOV AH,9 INT 21H LEA DX,MSG3 INT 21H MOV AH,4CH INT 21H CODE ENDS END START

#include

int main()
{
int x,s=0;
printf("input 4 digit hex
");
scanf("%4x",&x);
printf("your input hex is: %#x == decimal: %d
",x,x);
s = (x & 0x000f)+ ((x & 0x00f0)>>4) + ((x & 0x0f00)>>8)+ ((x &
0xf000)>>12);
printf("sum=%#x decimal:%d
",s,s);
return 0;
}
例子:

input 4 digit hex
1f1f
your input hex is: 0x1f1f == decimal: 7967
sum=0x20 decimal:32

;在屏幕上显示转换后的十六进制数吧
code segment
assume cs:code
start:
mov cx,4
newchar: mov ah, 1 ;键盘输入
int 21h
sub al, 30h
jl newchar ; <0重输
cmp al, 9
jg newchar ; >9重输
cbw
xchg ax, bx
mov dx, 10
mul dx
xchg ax, bx
add bx, ax
loop newchar
exit:
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h

mov ch, 4
rotate: mov cl, 4
rol bx, cl
mov al, bl
and al, 0fh
add al, 30h ; ’0’~’9’ ASCII 30H~39H
cmp al, 3ah
jl printit
add al, 7h ; ’A’~’F’ ASCII 41H~46H
printit: mov dl, al
mov ah, 2
int 21h
dec ch
jnz rotate
mov ah,1
int 21h
mov ah,4ch
int 21h
code ends
end start

code segment
assume cs:code
start:
mov cx,4
xor ax,ax
xor bx,bx;输入并存入bx中
loopIn:
mov ah,07h
int 21h
cmp al,30h
jb loopIn
cmp al,39h
ja loopIn
and al,0fh
rol bx,1
rol bx,1
rol bx,1
rol bx,1
or bl,al
loop loopIn
output:
mov ax,bx
mov bx,0ah
xor cx,cx
xor dx,dx
again1:
div bx
add dl,30h
push dx
xor dx,dx
inc cx
or ax,ax
jnzagain1
again2:
mov ah,2
pop dx
int 21h
dec cx
jnz again2
mov ah,4ch
int 21h
code ends
end start

display equ 2h
key_in equ 1h
doscall equ 21h
decihex segment
main proc far
assume cs:decihex
start:
push ds
mov ax,0
push ax

call decibin
call crlf
;call binihex
;call crlf
call binidec
call crlf

ret
main endp

decibin proc near
mov bx,0
mov cx,4
newchar:
mov ah,1
int 21h
sub al,30h
jl exit
cmp al,9d
jg exit
cbw
xchg ax,bx
mov cx,10d
mul cx
xchg ax,bx
add bx,ax
loop newchar
exit:
ret
decibin endp

binihex proc near
mov ch,4
rotate:mov cl,4
rol bx,cl
mov al,bl
and al,0fh
add al,30h
cmp al,3ah
jl printit
add al,7h
printit:
mov dl,al
mov ah,2
int 21h
dec ch
jnz rotate
ret
binihex endp
crlf proc near
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
ret
crlf endp

binidec proc near
mov cx,10000d
call dec_div
mov cx,1000d
call dec_div
mov cx,100d
call dec_div
mov cx,10d
call dec_div
mov cx,1d
call dec_div
ret
dec_div proc near
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
add dl,30h
mov ah,display
int doscall
ret
dec_div endp
binidec endp

decihex ends
end start


编写一个程序,从键盘输入一个四位整数n,输出它的各位数字之和.例如n=1...
按照题目要求编写的程序如下(见图)

汇编语言,编程实现从键盘输入四位十六进制数,使出对应的十进制数,用...
'a' JB @0 CMP AL,'f' JBE @4 JMP @0 @2: SUB AL,'0' JMP @5 @3: SUB AL,'A' ADD AL,10 JMP @5

从键盘输入一个四位整数,求出该数有多少位是7
include <stdio.h> int main(){ int n,cnt;scanf("%d",&n);for(cnt=1;n>10;cnt++,n\/=10);printf("%d",cnt);return 0;}

从键盘上输入一个4位数,求该数个位,十位,百位,千位上的数的和
include <stdio.h>void main(){int n,s=0;scanf("%d",&n);if(n<1000||n>9999)printf("Input error!");\/\/如果输入不是四位数,给出错误提示else{while(n){s+=n%10;n\/=10;}printf("%d",s);}}\/\/运行示例:

用C++编写 从键盘上输入一个四位整数,输出这个数的每个数字
using namespace std;int main(){ int a,n=0;int sum=0;cin>>a;while(a){ sum+=a%10;++n;a\/=10;} cout<<"n = "<<n<<", sum = "<<sum<<endl;getchar(); getchar();return 0;}

汇编 从键盘输入一个四位十六进制数,从屏幕以二进制的形式输出_百度知 ...
jnz input ;循环输入4个有效字符 mov dl,'=' ;输入等于号 mov ah,02h int 21h mov ch,10Hprint:mov dl,1 ;假设输入的数的二进制每一位都是1 rol bx,1 ;将输入的数循环向左移1位 jc CF_1 ;如果该是1,则CF为1,即产生进位 mov dl,0 ;CF=0,即该位为0CF...

从键盘上输入一个四位整数n判断该年是否为闰年用函数实现?
您好,很高兴回答您的问题。include<stdio.h> void y(int m){if(m%4==0&&m%100!=0||m%400==0)printf("%d是闰年",m);else printf("%d不是闰年",m);} void main(){int m;scanf("%d",&m);y(m);}

编程:从键盘输入一个四位的整数,输出各个数据位
我用c写吧 include<stdio.h> main(){ int a;printf("输入一个四位的整数\\n");scanf("%d",&a);printf("个位%d 十位%d 百位%d 千位%d\\n",a%10,(a\/10)%10,(a\/100)%10,a\/1000);}

从键盘上输入任意一个四位正整数,编写程序分别输出该数的个位、十位...
echo off :begin cls set \/p n=请输入一个四位正整数:if not defined n goto begin echo %n%的个位数是: %n:~3,1 echo %n%的十位数是: %n:~2,1 echo %n%的百位数是: %n:~1,1 echo %n%的千位数是: %n:~0,1 pause>nul ...

c语言问题 键盘输入一个四位数,输出它的各位数字之和。如n=1234,输出1...
include<stdio.h> include<stdlib.h> intmain(){ inta,b;scanf("%d",&a);b=(a\/1000)+(a%1000)\/100+(a%100)\/10+a%10;printf("b=%d\\n",b);system("pause");return0;}

海阳市13036296793: 求“从键盘上输入四位十进制数转化为十六进制数并在屏幕上显示这个十进制数”的汇编程序 -
单忽圣诺: ;在屏幕上显示转换后的十六进制数吧 code segment assume cs:code start: mov cx,4 newchar: mov ah, 1 ;键盘输入 int 21h sub al, 30hjl newchar ; <0重输 cmp al, 9 jg newchar ; >9重输 cbw xchg ax, bx mov dx, 10 mul dx xchg ax, bx add bx, ax ...

海阳市13036296793: 从键盘输入一个4位以内的10进制数字字符串,转换成16进制形式输出. -
单忽圣诺: ; 本程序通过编译,运行正确Code Segment Assume CS:Code,DS:CodeCR equ 000DHLF equ 000AHKBBack equ 0008...

海阳市13036296793: 求高手写C语言程序代码:"从键盘输入一个十进制数,将其转换为二进制、八进制和十六进制数." -
单忽圣诺: #includevoid ex10to2(); void ex10to8(); void ex10to16(); void main() { int select; do { printf("\n 0、退出 1、十进制~二进制 2、十进制~八进制 3、十进制~十六进制\n"); printf("请选择功能:"); scanf("%d",&select); if(select == 0) break; ...

海阳市13036296793: C语言编程:从键盘上输入一个十进制数,将其转换成八进制数,然后输出. -
单忽圣诺: 非递归算法: #include <iostream> using namespace std; #include <math.h> #define MAXSIZE 20 typedef struct Stack {char node[MAXSIZE];int top; }Stack;int main() {Stack s;s.top=-1;int n;cout<<"请输入十进制数:"<<endl;cin>>n;int ...

海阳市13036296793: c语言编程题:从键盘输入一个十进制数,将其转换为二进制、八进制和十六进制数,并同时输出. -
单忽圣诺: #includevoid showbit(int n) { if(n>1){ showbit(n/2); printf(" "); } printf("%d",n%2); } void showoct(int n) { if(n>7){ showoct(n/8); printf(" "); } printf("%d",n%8); } void showhex(int n) { if(n>15){ showhex(n/16); printf(" "); } printf("%d",n%16); ...

海阳市13036296793: 从键盘输入一个4位以内的10进制数字字符串,转换成16进制形式输出 汇编 -
单忽圣诺: assume cs:codecode segment start:xor dx, dxxor bx, bxmov cx, 10mov si, 4call gomov ax, 4c00hint 21h go:cmp si, 0jz @2mov ah, 1int 21hand ax, 0fhxchg ax, bxmul cxadd ax, bxxchg ax, bxdec sicall gomov cl, 4rol bx, clmov ...

海阳市13036296793: 从键盘输入一个十进制数,将其转换成等值的二进制数 C语言程序怎么写? -
单忽圣诺: #include"stdio.h" main() {int i,a[5],max,min,ave=0;<br/><br/>for(i=0;i<5;i++)<br/>scanf("%d",&a[i]);<br/>max=a[0];<br/>min=a[0];<br/>for(i=0;i<5;i++)<br/>{max=max>a[i]? max:a[i];<br/>min=min<a[i]? min:a[i];<br/>ave+=a[i];<br/>} ave=(ave-max-min)/3; printf("%d\n",ave); }

海阳市13036296793: c语言从键盘输入一个十进制数,将其转换为二进制、八进制和十六进制数. -
单忽圣诺: #include<stdio.h>#define MAX 1000void main(){ int func(char s[]); int c,i=0,flag=0,flag1=1; char t[MAX]; printf("请输入一个十六进制的数:\n"); while((c=getchar())! ='\0'&&i<MAX&&flag1) { if(c>='0'&&c<='9'||c>='a'&&c<='f'||c>='A'&&c<='F') { flag...

海阳市13036296793: 将四位的十进制数转成一个为BCD码的程序 -
单忽圣诺: 二进制编码的十进制数,简称BCD码(Binarycoded Decimal). 这种方法是用4位二进制码的组合代表十进制数的0,1,2,3,4,5,6 ,7,8,9 十个数符.4位二进制数码有16种组合,原则上可任选其中的10种作为代码,分别代表十进制中的0,1,2,3,4,5,6,7...

海阳市13036296793: C语言编程题:从键盘上输入一个十进制然后转换为八进制 -
单忽圣诺: 最简单的是:scanf("%d",&a); printf("十进制%d转换为八进制为%o\n",a,a); 自己编程序转换:void Convert(int a,int n) { if ( a ) { Convert(a/n,n); printf("%d",a%n); } } void main() { int a; scanf("%d",&a); printf("十进制%d转换为八进制为",a);Convert(a,8); printf("\n"); }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网