Win32汇编备份--选择结构

选择结构

  1. 编写一段程序,完成下面计算公式,其中:变量x和y都是REAL8类型,结果保留2位小数。
    在这里插入图片描述
    运行后若输入:-2.0
    则结果输出:-0.91
    运行后若输入:0.52
    则结果输出:1.04
    运行后若输入:2.0
    则结果输出:-0.42
    请在;/和;/之间编写程序。
 ;*【*/
.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 '%lf',0
outfmt BYTE '%.2lf',13,10,0
x QWORD ?
y QWORD 2.0
mark QWORD 1.0
flag QWORD -1.0
anw QWORD ?
.code
start:
invoke scanf,ADDR infmt,ADDR x
FEQU=40H
FLESS=1
FLD x
FCOMP flag
fnstsw ax
.IF ah&FLESS
FLD x
FSIN
FSTP anw
invoke printf,ADDR outfmt,anw
.ELSE
FLD x
FCOMP mark
fnstsw ax
.IF ah&(FLESS or FEQU)
FLD x
FMUL y
FSTP anw
invoke printf,ADDR outfmt,anw
.ELSE
FLD x
FCOS
FSTP anw
invoke printf,ADDR outfmt,anw
.ENDIF
.ENDIF
invoke ExitProcess,0
end start
 ;*】*/
  1. 编写一段程序,用jcc指令(不用.IF语句)完成下面计算公式,其中:变量x和y都是整数类型。
    在这里插入图片描述
    运行后若输入:-4
    则结果输出:-4
    运行后若输入:4
    则结果输出:16
    运行后若输入:22
    则结果输出:66
    请在;/和;/之间编写程序。
 ;*【*/
.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',0
outfmt BYTE '%d',13,10,0
x SDWORD ?
.code
start:
invoke scanf,ADDR infmt,ADDR x
MOV EAX,x
CMP EAX,0
JG Great0
MOV x,EAX
JMP DONE
Great0:
CMP EAX,10
JGE Great10
IMUL EAX,x
JMP DONE
Great10:
IMUL EAX,3
DONE:
invoke printf,ADDR outfmt,EAX
invoke ExitProcess,0
end start
 ;*】*/
  1. 输入一个整数,判断能否被3,5,7整除。具体情况如下:
    1.若同时能被3,5,7整除输出357;
    2.若同时能被3,5整除输出35;
    3.若同时能被3,7整除输出37;
    4.若同时能被5,7整除输出57;
    5.若只能被3整除输出3;
    6.若只能被5整除输出5;
    7.若只能被7整除输出7;
    8.若都不整除,则不输出信息。
    运行后输入:
    105
    则结果输出:
    357
    运行后输入:
    15
    则结果输出:
    35
    运行后输入:
    14
    则结果输出:
    7
    运行后输入:
    121
    则结果输出:
    (没有输出)
    请在;/和;/之间编写程序。
.386						;选择的处理器
.model flat, stdcall		;存储模型,Win32程序只能用平展(flat)模型
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 '%d',0
outfmt BYTE '%d',0
x DWORD ?
mark_3 DWORD ?
mark_5 DWORD ?
mark_7 DWORD ?
flag_3 DWORD 3
flag_5 DWORD 5
flag_7 DWORD 7
.code
start:
invoke scanf,ADDR infmt,ADDR x
MOV EAX,x
CDQ
IDIV flag_3
MOV mark_3,EDX
MOV EAX,x
CDQ
IDIV flag_5
MOV mark_5,EDX
MOV EAX,x
CDQ
IDIV flag_7
MOV mark_7,EDX
.IF mark_3==0
invoke printf,ADDR outfmt,flag_3
.ENDIF
.IF mark_5==0
invoke printf,ADDR outfmt,flag_5
.ENDIF
.IF mark_7==0
invoke printf,ADDR outfmt,flag_7
.ENDIF
 ;*】*/
invoke ExitProcess,0		;⑨退出进程,返回值为0
end	start					;⑩指明程序入口点start
  1. 用.IF….ELSEIF伪指令实现输入一个分数(0~100的整数),输出相应的成绩等级。分数与成绩等级对应关系分别为90 ~ 100分为优秀,80 ~ 89为良好,70 ~ 79为中,60 ~ 69为及格,0 ~ 59为不及格。
    运行后若输入:95
    则结果输出:优秀
    运行后若输入:86
    则结果输出:良好
    运行后若输入:73
    则结果输出:中
    运行后若输入:66
    则结果输出:及格
    运行后若输入:53
    则结果输出:不及格
    请在;/和;/之间编写程序。
.386						;选择的处理器
.model flat, stdcall		;存储模型,Win32程序只能用平展(flat)模型
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 '%d',0
outfmt_1 BYTE '优秀',13,10,0
outfmt_2 BYTE '良好',13,10,0
outfmt_3 BYTE '中',13,10,0
outfmt_4 BYTE '及格',13,10,0
outfmt_5 BYTE '不及格',13,10,0
x DWORD ?
.code
start:
invoke scanf,ADDR infmt,ADDR x
.IF x>=90
invoke printf,ADDR outfmt_1
.ELSEIF x<90&&x>=80
invoke printf,ADDR outfmt_2
.ELSEIF x<80&&x>=70
invoke printf,ADDR outfmt_3
.ELSEIF x<70&&x>=60
invoke printf,ADDR outfmt_4
.ELSE
invoke printf,ADDR outfmt_5
.ENDIF
 ;*】*/
invoke ExitProcess,0		;⑨退出进程,返回值为0
end	start					;⑩指明程序入口点start
  1. 编写一段程序,用.IF语句(不用jcc指令)完成下面计算公式,其中:变量x和y都是整数类型。
    在这里插入图片描述
    运行后若输入:-4
    则结果输出:-4
    运行后若输入:4
    则结果输出:16
    运行后若输入:22
    则结果输出:66
    请在;/和;/之间编写程序。
 ;*【*/
.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',0
outfmt BYTE '%d',13,10,0
x SDWORD ?
.code
start:
invoke scanf,ADDR infmt,ADDR x
.IF x<=0
invoke printf,ADDR outfmt,x
.ENDIF
.IF x>0&&x<10
MOV EAX,x
IMUL EAX,x
invoke printf,ADDR outfmt,EAX
.ENDIF
.IF x>=10
MOV EAX,x
IMUL EAX,3
invoke printf,ADDR outfmt,EAX
.ENDIF
invoke ExitProcess,0
end start
 ;*】*/

after all

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值