Win32汇编备份--MASM整数+ - * / %

本文详细介绍使用MASM进行整数加减乘除运算的方法,包括输入整数并计算特定表达式的值,以及如何将小写字母转换为大写字母。通过具体实例,深入解析了MOV、ADD、SUB、IMUL、CDQ和IDIV等指令的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MASM整数+ - * / %

  1. 键盘输入整数x、y、z的值,求如下表达式的值:
    xy+x%y-z
    运行后若输入:8 4 2
    则结果输出:8
    4+8%4-2=30
    请在;/和;/之间编写程序。
 ;*【*/
.386
.model flat,stdcall
option casemap:none
include kernel32.inc
includelib kernel32.lib
includelib msvcrt.lib
scanf PROTO C:DWORD,:vararg
printf PROTO C:DWORD,:vararg
.data
infmt BYTE '%d %d %d',0
outfmt BYTE '%d*%d+%d%%%d-%d=%d',13,10,0
x DWORD ?
y DWORD ?
z DWORD ?
an DWORD ?
bn DWORD ?
cn DWORD ?
anw DWORD ?
.code
start:
invoke scanf,ADDR infmt,ADDR x,ADDR y,ADDR z
MOV EAX,x
IMUL EAX,y
MOV an,EAX
MOV EAX,x
CDQ
IDIV y
MOV bn,EDX
MOV EAX,an
ADD EAX,bn
SUB EAX,z
MOV anw,EAX
invoke printf,ADDR outfmt,x,y,x,y,z,anw
invoke ExitProcess,0
end start
 ;*】*/
  1. 输入两个小写字母,然后输出其相应的大写字母。
    运行后输入:
    a b
    则结果输出:
    A B
    请在;/和;/之间编写程序。
.386				;选择的处理器
.model flat, stdcall	
option casemap:none		;指明标识符大小写敏感
include	kernel32.inc	;要引用的头文件
includelib	kernel32.lib	;要引用的库文件
includelib	msvcrt.lib	;引用C库文件
scanf PROTO C:DWORD,:vararg	;C语言scanf函数原型声明
printf PROTO C:DWORD,:vararg;C语言printf函数原型声明
.data				;⑤数据段
 ;*【*/
infmt BYTE '%c %c',0
outfmt BYTE '%c %c',13,10,0
x DWORD ?
y DWORD ?
an DWORD ?
bn DWORD ?
.code
start:
invoke scanf,ADDR infmt,ADDR x,ADDR y
MOV EAX,x
SUB EAX,32
MOV an,EAX
MOV EAX,y
SUB EAX,32
MOV bn,EAX
invoke printf,ADDR outfmt,an,bn
 ;*】*/
invoke	ExitProcess,0		;退出进程,返回值为0
end start
  1. 键盘输入整数x、y、z的值,求如下表达式的值:
    xy+x/y-z
    运行后若输入:8 4 2
    则结果输出:8
    4+8/4-2=32
    请在;/和;/之间编写程序。
 ;*【*/
.386
.model flat,stdcall
option casemap:none
include kernel32.inc
includelib kernel32.lib
includelib msvcrt.lib
scanf PROTO C:DWORD,:vararg
printf PROTO C:DWORD,:vararg
.data
infmt BYTE '%d %d %d',0
outfmt BYTE '%d*%d+%d/%d-%d=%d',13,10,0
x DWORD ?
y DWORD ?
z DWORD ?
an DWORD ?
bn DWORD ?
cn DWORD ?
anw DWORD ?
.code
start:
invoke scanf,ADDR infmt,ADDR x,ADDR y,ADDR z
MOV EAX,x
IMUL EAX,y
MOV an,EAX
MOV EAX,x
CDQ
IDIV y
MOV bn,EAX
MOV EAX,an
ADD EAX,bn
SUB EAX,z
MOV anw,EAX
invoke printf,ADDR outfmt,x,y,x,y,z,anw
invoke ExitProcess,0
end start
 ;*】*/

after all

学习使用汇编的指令和四个寄存器(EAX,EBX,ECX,EDX)计算整数加减乘余

运算使用所的指令:

指令实现运算
MOV赋值指令,如(MOV EAX,an)为将an的值赋给EAX寄存器
ADD加法指令,如(ADD EAX,an)为将EAX加上an并且将运算后的值保存在EAX
SUB减法指令,如(SUB EAX,an)为将EAX减去an并且将运算后的值保存在EAX
IMUL带符号乘法指令,如(IMUL EAX,an)为将EAX乘上an并且将运算后的值保存在EAX
CDQ寄存器扩充指令,使EAX和EDX分别保存除法的商和余数(在除法运算中,除了有运算后的商,还有余数,两个数无法保存在同一个寄存器下,所以需要使用扩充指令将EDX扩充进运算中保存余数)
IDIV带符号除法指令(除法指令之前必须有CDQ扩充寄存器指令才能执行),如(IDIV an)为将EAX除上an并且将运算后的商保存在EAX,余数保存在EDX(除法指令和其他指令不同,指令后参数只有除数,默认将EAX除上除数,再将商保存在EAX,余数保存在EDX)

寄存器:
整数的运算所使用的寄存器有四个,分别为EAX,EBX,ECX,EDX
其中加减乘的运算均可使用四个寄存器,但是除法只能使用EAX,EDX两个寄存器

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值