1、 编写32位控制台应用程序提示用户输入32位有符号整数x, y, z,计算result=x-2y+4z的值,并显示计算结果

作者&投稿:戎田 (若有异议请与网页底部的电邮联系)
void main
{
int x, y,z,result;
scanf("%d %d %d",x,y,z); 注意这行中的%d之间是空格,所以在输入数据时必须空格。
result=x-2y+4z;
printf("%d\n",result);
getchar();
}

void main
{
int x, y,z,result;
scanf("%d %d %d",x,y,z);
result=x-2*y+4*z;
printf("%d\n",result);
getchar();
}

汇编语言的Win32位控制台程序,计算result=m*n -x的值。要求提示用户输入32位带符号整数m, n, x,并显示结~

80分有点少……

我承认程序不是我写的~是小文写的~不过分数我代领了~哈哈哈哈哈

assume cs:code,ds:data

data segment
NA dw 0F321H,09AFCH
NB dw 08818H,0301DH
;-------第一个字是等待相乘的数的高16位,第二个是低十六位
T1 dw 0,0,0
T2 dw 0,0,0
;-------32位数乘以16位数不可能大于48位,所以分配3个字
R dw 0,0,0,0
;-------32位数乘以32位数不可能大于64位,所以为结果分配4个字
data ends

code segment
start:mov ax,data
mov ds,ax
;-------初始化段寄存器
Step1:mov ax,NA+2
mov bx,NB+2
mul bx
mov T1+4,ax
mov cx,dx
;-------Number A 的低16位乘以 Number B 的低十六位,结果存入T1+4
;进位存入CX
mov ax,NA
mov bx,NB+2
mul bx
mov T1+2,ax
add T1+2,cx
adc T1,dx
;-------Number A 的高16位乘以 Number B 的低十六位,结果存入T1+4
;结果存入T1+2,将T1+2与上一次相乘的进位相加存入T1+2
;将第二次相乘的进位带符号相加入 T1(前一位的相加可能产生进位)
Step2:mov ax,NA+2
mov bx,NB
mul bx
mov T2+4,ax
mov cx,dx
;-------同理
mov ax,NA
mov bx,NB
mul bx
mov T2+2,ax
add T2+2,cx
adc T2,dx
;-------同理
SUM:mov ax,T1+4
mov R+6,ax

mov ax,T2+4
add T1+2,ax
mov ax,T1+2
mov R+4,ax

mov ax,T2+2
adc T1,ax
mov ax,T1
mov R+2,ax

mov ax,T2
adc R,ax
;-------错位相加
mov ax,4C00H
int 21H

code ends

end start





原理图:
NA NA+2
× NB NB+2
——————————————————
T1 T1+2 T1+4
+ T2 T2+2 T2+4
——————————————————
R R+2 R+4 R+6