Win32汇编 选择结构

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yky__xukai/article/details/82949874

题目1:

 ;*【*/
.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
x SDWORD ?
y SDWORD 3
fmt BYTE '%d',0
fmt2 BYTE '%d',0
.code
start:
invoke scanf,ADDR fmt,ADDR x
MOV EAX,x
CMP EAX,0
JG Great0; x>0转Great0
JMP DONE
Great0:
CMP EAX,10
JGE Great10;x>=10转Great10
IMUL x
JMP DONE
Great10:
IMUL y
DONE:
invoke printf,ADDR fmt2,EAX
invoke ExitProcess,0
End start

 ;*】*/

题目2:

;*【*/
.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
x		SDWORD ?
y		SDWORD ?
z		SDWORD 3

fmt	DB '%d',0
.code
start:
invoke scanf,addr fmt,addr x	;输入整数成绩
.IF x<=0						;若成绩x>=60
MOV EAX,x
MOV y,EAX
.ELSE
.IF x<10						;若成绩x>=60
MOV EAX,x
IMUL x
MOV y,EAX
.ELSE
MOV EAX,x
IMUL z
MOV y,EAX
.ENDIF
.ENDIF

invoke printf,addr fmt,y	;否则输出x是不及格
invoke ExitProcess,0
End start

题目3:

.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						;⑤数据段
 ;*【*/
x DWORD ?
a DWORD 3
b DWORD 5
d DWORD 7
intftm BYTE '%d',0
outftm BYTE '%d',0
.code
start:
invoke scanf,ADDR intftm,ADDR x
MOV EAX,x
CDQ
IDIV a
.IF EDX==0
invoke printf,ADDR outftm,a ;判断被三整除
.ENDIF 
MOV EAX,x
CDQ
IDIV b
.IF EDX==0
invoke printf,ADDR outftm,b ;判断被五整除
.ENDIF 
MOV EAX,x
CDQ
IDIV d
.IF EDX==0
invoke printf,ADDR outftm,d ;判断被七整除
.ENDIF 
;*】*/
invoke ExitProcess,0		;⑨退出进程,返回值为0
end	start					;⑩指明程序入口点start

题目4:

.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						;⑤数据段
 ;*【*/
fmt BYTE '%d',0
fnt BYTE '%s',0
fmt1 BYTE '优秀',0
fmt2 BYTE '良好',0
fmt3 BYTE '中',0
fmt4 BYTE '及格',0
fmt5 BYTE '不及格',0
x DWORD ?
.code
start:
invoke scanf,ADDR fmt,ADDR x
.IF x>=90 
invoke printf,ADDR fnt,ADDR fmt1
.ELSEIF x>=80
invoke printf,ADDR fnt,ADDR fmt2
.ELSEIF x>=70
invoke printf,ADDR fnt,ADDR fmt3
.ELSEIF x>=60
invoke printf,ADDR fnt,ADDR fmt4
.ELSE
invoke printf,ADDR fnt,ADDR fmt5
.ENDIF
 ;*】*/
invoke ExitProcess,0		;⑨退出进程,返回值为0
end	start					;⑩指明程序入口点start

题目5:

 ;*【*/
.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						;⑤数据段
x QWORD ?
y1 QWORD -1.0
y2 QWORD 1.0
y3 QWORD 2.0
z QWORD ?
fmt BYTE '%lf',0
fmt1 BYTE '%.2lf',0
.code
start:
invoke scanf,addr fmt,addr x	
FEQU=40H
FLESS=1
FLD x
FCOMP y1
fnstsw ax
.IF (AH & FLESS)  ;x<y1	
FLD x
FSIN 
FSTP z			
invoke printf,ADDR fmt1,z  ;

.ELSE                   ;-1.0<=x
FLD x
FCOMP y2
fnstsw ax
.IF AH & (FLESS or FEQU)                ;x<=1.0
FLD x
FMUL y3
FSTP z
invoke printf,ADDR fmt1,z
.ELSE
FLD x
FCOS 
FSTP z
invoke printf,ADDR fmt1,z
.ENDIF

.ENDIF
invoke ExitProcess,0
end start
 ;*】*/

 

猜你喜欢

转载自blog.csdn.net/yky__xukai/article/details/82949874