汇编——win32下计算result=m-n*x

编写Windows 32位控制台程序,计算result=m-n*x的值。要求提示用户输入32位带符号整数m, n, x,并显示计算结果。屏幕格式为:

m=                             n=                               x=  

result = m-n*x =    

;Windows 32位控制台程序,计算result=m-n*x的值

.386
.model 		flat,stdcall
option 		casemap:none
includelib	msvcrt.lib

printf	PROTO C :dword,	:vararg				;函数声明
scanf	PROTO C	:dword,	:vararg

.data										;数据段
sztip	byte	'Please Input m, n, x in order',0ah,0		;提示用户输入
sztip1	byte	'm=',0
sztip2	byte	'n=',0
sztip3  byte	'x=',0
szres1	byte	'm=%-13d n=%-13d x=%-13d',0ah,0				;输出m n x格式
szres2  byte	'result = m-n*x = %I64d',0ah,0
szin	byte	'%d',0										;输入格式
szinq	byte	'%c%c',0							;自定义"system(pause)"

.data?														;未初始化的变量
valuem	dword	?
valuen	dword	?
valuex	dword	?
t1		byte	?
t2		byte	?
result	qword	?

.code										;代码段
start:
	invoke	printf,
			offset sztip

	invoke	printf,							
			offset sztip1					;提示输入M
	invoke  scanf,
			offset szin,offset valuem

	invoke  printf,							
			offset sztip2					;提示输入N
	invoke  scanf,
			offset szin,offset valuen	

	invoke	printf,	
			offset sztip3					;提示输入X
	invoke	scanf,
			offset szin,offset valuex

	mov eax,valuen
	mov ecx,valuex
	imul	ecx								;带符号数相乘 存在EDX EAX 中
	xor ecx,ecx
	mov	ecx,edx
	mov ebx,eax								;高位转存到ECX 低位转存到EBX
	xor eax,eax
	mov eax,valuem
	cdq								;将32位扩展到64位 M的高位在EDX 低位在EAX
	sub eax,ebx
	sbb edx,ecx								;带借位减法

	mov sdword ptr [result],eax				;将eax赋给result的低位  
    mov sdword ptr [result+4],edx			;将edx赋给result的高位  
	invoke  printf,							;输出64位范围内数据
			offset szres2,result
	invoke	scanf,							;相当system(pause)
			offset szinq,offset t1,offset t2
	ret

end start


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值