
DATA SEGMENT
X DD 12345H
Y DD 12346H
Z DD 12347H
W DD
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AX,WORD PTR X
MOV DX,WORD PTR X+2
ADD AX,WORD PTR Y
ADC DX,WORD PTR Y+2
ADD AX,36
ADC DX,0
SUB AX,WORD PTR Z
SBB DX,WORD PTR Z+2
MOV WORD PTR W,AX
MOV WORD PTR W+2,DX
MOV AH,4CH
INT 21H
CODE ENDS
END START
#include <stdioh>
unsigned long BCD2BIN_l(unsigned long num)
{
unsigned long out = 0;
unsigned char i = 0;
while(num && i++ < 8)
{
if(out) out =10;
if(num & 0xF0000000 == 0) continue;
out += (num >> 28) & 0xF;
num <<= 4;
}
while(i++ < 8) out = 10;
return out;
}
// 长整数转换为8421BCD码长整数
unsigned long BIN2BCD_l(unsigned long num)
{
unsigned long out = 0;
unsigned char i = 0;
while(num && i++ < 8)
{
out >>= 4;
out |= (num % 10) << 28;
num /= 10;
}
while(i++ < 8) out >>= 4;
return out;
}
// 8421BCD码短整数转换为短整数
unsigned short BCD2BIN_s(unsigned short num)
{
unsigned short out = 0;
unsigned char i = 0;
while(num && i++ < 4)
{
if(out) out =10;
if(num & 0xF000 == 0) continue;
out += (num >> 12) & 0xF;
num <<= 4;
}
while(i++ < 4) out = 10;
return out;
}
// 短整数转换为8421BCD码短整数
unsigned short BIN2BCD_s(unsigned long num)
{
unsigned short out = 0;
unsigned char i = 0;
while(num && i++ < 4)
{
out >>= 4;
out |= (num % 10) << 12;
num /= 10;
}
while(i++ < 4) out >>= 4;
return out;
}
// 整数转换为8421BCD码整数
unsigned char BIN2BCD_c(unsigned char num)
{
return ((num / 10) << 4) | (num % 10);
}
// 整数转换为8421BCD码整数
unsigned char BCD2BIN_c(unsigned char num)
{
return ((num & 0xF0) >> 4) 10 + (num & 0xF);
}
unsigned char rMul_BCD_c(unsigned char x, unsigned char y, unsigned char p)
{
// p为小数位数
unsigned short r = BCD2BIN_s(x) BCD2BIN_s(y);
while(p != 1) {r /= 10; p--;}
return BIN2BCD_c((unsigned char)((r + 5) / 10));
}
unsigned short rMul_BCD_s(unsigned short x, unsigned short y, unsigned char p)
{
// p为小数位数
unsigned long r = BCD2BIN_l(x) BCD2BIN_l(y);
while(p != 1) {r /= 10; p--;}
return BIN2BCD_s((unsigned short)((r + 5) / 10));
}
unsigned char rMul_BIN_c(unsigned char x, unsigned char y, unsigned char p)
{
// p为小数位数
unsigned short r = (unsigned short)x (unsigned short)y;
while(p != 1) {r /= 10; p--;}
return (unsigned char)((r + 5) / 10); // 四舍五入
}
unsigned short rMul_BIN_s(unsigned short x, unsigned short y, unsigned char p)
{
// p为小数位数
unsigned long r = (unsigned long)x (unsigned long)y;
while(p != 1) {r /= 10; p--;}
return (unsigned short)((r + 5) / 10); // 四舍五入
}
// 演示函数结果
void main()
{
// 整数计算演示
unsigned long x = 0x9678;
unsigned long y = 0x4865;
printf("整数计算演示\nunsigned long\nBIN: %u %u = %u\n", x, y, x y);
printf("BCD: %X %X = %X\n", x, y, BIN2BCD_l(BCD2BIN_l(x) BCD2BIN_l(y)));
unsigned short sx = 0x97;
unsigned short sy = 0x48;
printf("unsigned short\nBIN: %u %u = %u\n", sx, sy, sx sy);
printf("BCD: %X %X = %X\n", sx, sy, BIN2BCD_s(BCD2BIN_s(sx) BCD2BIN_s(sy)));
unsigned char cx = 0x6;
unsigned char cy = 0x12;
printf("unsigned char\nBIN: %u %u = %u\n", cx, cy, cx cy);
printf("BCD: %X %X = %X\n", cx, cy, BIN2BCD_c(BCD2BIN_c(cx) BCD2BIN_c(cy)));
// 1位定点小数演示
printf("1位定点小数演示\n2 Byte\nBIN: %g %g = %g\n", sx 01 , sy 01 , rMul_BIN_s(sx, sy, 1) 01);
printf("BCD: %g %g = %g\n", BCD2BIN_s(sx) 01, BCD2BIN_s(sy) 01, BCD2BIN_s(rMul_BCD_s(sx, sy, 1)) 01);
printf("1 Byte\nBCD: %g %g = %g\n", cx 01 , cy 01 , rMul_BIN_c(cx, cy, 1) 01);
printf("BCD: %g %g = %g\n", BCD2BIN_c(cx) 01, BCD2BIN_c(cy) 01, BCD2BIN_c(rMul_BCD_c(cx, cy, 1)) 01);
// 2位定点小数演示
printf("2位定点小数演示\n2 Bytet\nBIN: %g %g = %g\n", sx 001 , sy 001 , rMul_BIN_s(sx, sy, 2) 001);
printf("BCD: %g %g = %g\n", BCD2BIN_s(sx) 001, BCD2BIN_s(sy) 001, BCD2BIN_s(rMul_BCD_s(sx, sy, 2)) 001);
printf("1 Byte\nBCD: %g %g = %g\n", cx 001 , cy 001 , rMul_BIN_c(cx, cy, 2) 001);
printf("BCD: %g %g = %g\n", BCD2BIN_c(cx) 001, BCD2BIN_c(cy) 001, BCD2BIN_c(rMul_BCD_c(cx, cy, 2)) 001);
}
ASSUME CS:CC, DS:QQ
QQ SEGMENT
VV DW 4
WW DW +100
XX DW -100
YY DW +800
ZZ DW
QQ ENDS
;----------------------------------
CC SEGMENT
BG:
MOV AX, QQ
MOV DS, AX
;-----------------------------
MOV AX, XX
IMUL YY
IDIV WW
MOV ZZ, AX
MOV AX, XX
IMUL VV
ADD ZZ, AX
;-----------------------------
EXIT:
MOV AH, 4CH
INT 21H ;返回DOS
;----------------------------------
CC ENDS
END BG
用 DEBUG 调试,过程以及结果都正确。
ZZ 中的内容是 FB50H,也就是-1200。
1 输入时三个数间逗号分隔
#include <stdioh>
void swc(int x,int y){int t;t=y;y=x;x=t;}
main()
{
int x,y,z;
scanf("%d,%d,%d",&x,&y,&z);
if(x>y) swc(&x,&y);
if(x>z) swc(&x,&z);
if(y>z) swc(&y,&z);
printf("\n%d\n%d\n%d",x,y,z);
return 0;
}
2
#include <stdioh>
#include <stdlibh>
#include <timeh>
#define MAX 10
main()
{
unsigned int num[MAX],max,min,c,t;
srand(time(0));
for(t=0;t<MAX;++t) num[t]=rand()%71+30;
max=min=num[0];
c=0;
for(t=0;t<MAX;++t)
{
if(max<num[t]) max=num[t];
else if(min>num[t]) min=num[t];
c+=num[t];
printf("%5d",num[t]);
}
printf("\nmax=%d,min=%d,average=%d,sum=%d",max,min,c/MAX,c);
return 0;
}
3
#include <stdioh>
main()
{
float s=10,t=10;
int c=2,p=2;
while(t>1e-4)
{
t=10/(float)c;
s+=t;
c+=p;
++p;
}
printf("%f",s);
return 0;
}
#include <stdioh>
void main()
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
int max=a;
if(max<b)max=b;
if(max<c)max=c;
printf("%d\n",max);
}
这是输出最大值,最大的输出后再比较留下来的两个再输出就可以了
一穷举法
#include<stdioh>
main()
{int a,b,c;
scanf("%d,%d,%d",&a,&b,&c);
if(a<=b&&b<=c)
printf("%d,%d,%d",a,b,c);
else if(a<=c&&c<=b)
printf("%d,%d,%d",a,c,b);
else if(b<=a&&a<=c)
printf("%d,%d,%d",b,a,c);
else if(b<=c&&c<=a)
printf("%d,%d,%d",b,c,a);
else if(c<=a&&a<=b)
printf("%d,%d,%d",c,a,b);
else
printf("%d,%d,%d",c,b,a);
}
二冒泡法
#include<stdioh>
#define N 3
main()
{int a[N];
int i,j,t;
for(i=0;i<N;i++)
scanf("%d",&a[i]);
printf("\n");
for(j=1;j<=N-1;j++);
for(i=0;i<N-j;i++);
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("The sorted numbers:\n");
for(i=0;i<N;i++);
printf("%d ",a[i]);
printf("\n");
}
三打雷法
#include<stdioh>
#define N 3
main()
{int a[N];
int i,j,t;
for(i=0;i<N;i++)
scanf("%d",&a[i]);
printf("\n");
for(j=0;j<N-1;j++);
for(i=j+1;i<N;i++);
if(a[j]>a[i])
{t=a[j];a[j]=a[i];a[i]=t;}
printf("The sorted numbers:\n");
for(i=0;i<N;i++);
printf("%d ",a[i]);
printf("\n");
}
以上就是关于设X,Y,Z,W均为有符号双字型内存变量,试编写完整汇编语言源程序,实现表达式W=X+Y+36-Z全部的内容,包括:设X,Y,Z,W均为有符号双字型内存变量,试编写完整汇编语言源程序,实现表达式W=X+Y+36-Z、求助c语言小程序!求z=x*y;x,y分别为二进制数和BCD码时怎么写、汇编语言编程:X,Y,Z,W均为带16位带符号整型变量,计算Z = (X * Y) / W + 4*X,编程序实现.求大神!!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)