键盘输入若干个复数,分别求其模,最后再求所有模之和并显示(保留1位小数)。r=根号(a^2+b^2)
运行后若输入:
3.0  4.0
1.0  1.0
6.0  8.0
则结果输出:
16.4.386
.model flat, stdcall
option casemap :none
include kernel32.inc
includelib kernel32.lib
includelib  msvcrt.lib              ;引用C库文件
printf PROTO C:ptr sbyte,:vararg    ;C语言printf函数原型声明
scanf PROTO C:ptr sbyte,:vararg ;C语言scanf函数原型声明;*【*/
.data
infmt byte '%lf %lf',0
outfmt byte '%.1lf',13,10,0
a qword ?
b qword ?
apf qword ?
bpf qword ?
jia qword ?
r qword ?
re qword 0.0
.code
start:
fld re
invoke scanf ,addr infmt,addr a,addr b
.while eax==2
fld a
fmul a
fstp apf
fld b
fmul b
fstp bpf
fld apf
fadd bpf
fsqrt
fstp r
fadd r
invoke scanf ,addr infmt,addr a,addr b
.endw
fstp re
invoke printf ,addr outfmt,re
invoke ExitProcess,0
end start;*】*/
键盘输入正整数n,编程求1到正整数n之间的所有奇数之和并输出。
运行后若输入:5
则结果输出:1到5的奇数和为9
运行后若输入:10
则结果输出:1到10的奇数和为25
.386
.model flat, stdcall
option casemap :none
include kernel32.inc
includelib kernel32.lib
includelib  msvcrt.lib      ;引用C库文件
printf PROTO C:ptr sbyte,:vararg    ;C语言printf函数原型声明
scanf PROTO C:ptr sbyte,:vararg ;C语言scanf函数原型声明;*【*/
.data
infmt byte '%d',0
outfmt byte '1到%d的奇数和为%d',13,10,0
n dword ?
re dword 1
.code
start:
invoke scanf ,addr infmt ,addr n
mov ecx,1
mov eax,0
.while ecx<=nadd eax,ecxinc ecxinc ecx
.endw
invoke printf,addr outfmt,n,eax
invoke ExitProcess,0
end start;*】*/
//辗转相除法求两数的最大公约数(c语言)
int divisor (int a,int b) {int temp;    if(a<b) {    temp=a;a=b;b=temp;}   while(b!=0) {    //通过循环求两数的余数,直到余数为0temp=a%b;a=b;    b=temp;}return a;    //返回最大公约数
}
//嵌套求两数的最小公倍数
int multiple (int a,int b) {int divisor (int a,int b);    int temp;temp=divisor(a,b);    //求出最大公约数return  (a*b/temp);    //返回最小公倍数
}
键盘输入若干对整数x、y,求其相应的最大公约数。
运行后若输入:
18 12
8 12
10 12
则结果输出:
6
4
2;*【*/
.386
.model flat, stdcall
include kernel32.inc
includelib kernel32.lib
includelib  msvcrt.lib
printf PROTO C:ptr sbyte,:vararg
scanf PROTO C:ptr sbyte,:vararg
option casemap :none
.data
infmt BYTE '%d %d',0
outfmt BYTE '%d',13,0
x DWORD ?
y DWORD ?
min dword ?
max dword ?
t dword ?
re dword ?
.code
start:
invoke scanf ,addr infmt ,addr x,addr y
.while EAX==2
MOV t,1
FEQU=40H
FLESS=1
FLD x
FCOMP y
fnstsw ax
.if ah&FLESS  ;x<y
mov eax,y
mov max,eax
mov eax,x
mov min,eax
.else
mov eax,x
mov max,eax
mov eax,y
mov min,eax
.endif
.while t!=0
mov eax,max
cdq
idiv min
.if edx==0
mov t,edx
mov ebx,min
mov re,ebx
.else
mov ebx,min
mov max,ebx
mov eax,edx
mov min,eax
.endif
.endw
;FLD x      ;求最小公倍数
;FMUL y
;FDIV re
;FSTP re
invoke printf ,addr outfmt,re
invoke scanf ,addr infmt ,addr x,addr y
.endw
ret
end start;*】*/
键盘输入若干对整数x、y,求其相应的最小公倍数。
运行后若输入:
18 12
8 12
10 12
则结果输出:
36
24
60.386
.model flat, stdcall
include kernel32.inc
includelib kernel32.lib
includelib  msvcrt.lib              ;引用C库文件
printf PROTO C:ptr sbyte,:vararg    ;C语言printf函数原型声明
scanf PROTO C:ptr sbyte,:vararg ;C语言scanf函数原型声明
option casemap :none ;*【*/
.data
infmt BYTE '%d %d',0
outfmt BYTE '%d',13,0
x DWORD ?
y DWORD ?
min dword ?
max dword ?
t dword ?
re dword ?
.code
start:
invoke scanf ,addr infmt ,addr x,addr y
.while EAX==2
MOV t,1
FEQU=40H
FLESS=1
FLD x
FCOMP y
fnstsw ax
.if ah&FLESS  ;x<y
mov eax,y
mov max,eax
mov eax,x
mov min,eax
.else
mov eax,x
mov max,eax
mov eax,y
mov min,eax
.endif
.while t!=0
mov eax,max
cdq
idiv min
.if edx==0
mov t,edx
mov ebx,min
mov re,ebx
.else
mov ebx,min
mov max,ebx
mov eax,edx
mov min,eax
.endif
.endw
fld x
fmul y
fdiv re
fstp re
invoke printf ,addr outfmt,re
invoke scanf ,addr infmt ,addr x,addr y
.endw
ret
end start;*】*/
键盘输入若干对实数x、y,求各对实数乘积和。
运行后若输入:
2.5 2
1.5 4
2.2 2
则结果输出:
15.4;*【*/
.386
.model flat, stdcall
option casemap :none
include kernel32.inc
includelib kernel32.lib
includelib  msvcrt.lib              ;引用C库文件
printf PROTO C:ptr sbyte,:vararg    ;C语言printf函数原型声明
scanf PROTO C:ptr sbyte,:vararg ;C语言scanf函数原型声明
.data
infmt byte '%lf %lf',0
outfm byte '%g',13,10,0
x qword ?
y qword ?
m qword ?
md qword 0.0.code
start:
fld md
invoke scanf ,addr infmt,addr x,addr y
.while eax==2
fld x
fmul y
fstp m
fadd m
invoke scanf ,addr infmt,addr x,addr y
.endw
fstp md
invoke printf,addr outfm,md
invoke ExitProcess,0
end start;*】*/
键盘输入若干实数,求其和。
运行后若输入:
1.2  2.3  3.4
则结果输出:
6.9.386
.model flat, stdcall
include kernel32.inc
includelib kernel32.lib
includelib  msvcrt.lib              ;引用C库文件
printf PROTO C:ptr sbyte,:vararg    ;C语言printf函数原型声明
scanf PROTO C:ptr sbyte,:vararg ;C语言scanf函数原型声明
option casemap :none ;*【*/
.data
infmt byte '%lf',0
outfmt byte '%g',13,10,0
n qword ?
re qword ?
.code
start:
fld re
invoke scanf,addr infmt,addr n
.while eax==1
fadd n
invoke scanf ,addr infmt,addr n
.endw
fstp re
invoke printf,addr outfmt,re
invoke ExitProcess,0
end start;*】*/
输入若干整数,统计正数与负数和。
运行后若输入:1 -2 3 -4
则结果输出:正数和为:4 负数和为:-6.386             ;选择的处理器
.model flat, stdcall        ;存储模型,Win32程序只能用平展(flat)模型
option casemap:none     ;指明标识符大小写敏感
includelib  msvcrt.lib  ;引用C库文件
scanf PROTO C:DWORD,:vararg ;C语言scanf函数原型声明
printf PROTO C:DWORD,:vararg    ;C语言printf函数原型声明
.data               ;⑤数据段
szFmt   BYTE    '正数和为:%d 负数和为:%d',0;*【*/
include kernel32.inc
includelib kernel32.lib
infmt BYTE '%d',0
n sdword ?
z sdword 0
f sdword 0
.code
start:
invoke scanf ,addr infmt,addr n
.while eax==1
.if n>=0
mov ebx,z
add ebx,n
mov z,ebx
.else
mov ebx,f
add ebx,n
mov f,ebx
.endif
invoke scanf,addr infmt,addr n
.endw
invoke printf,addr szFmt,z,f
invoke ExitProcess,0;*】*/
end start
键盘输入一串字符(最多80个字符),输出其中的数字。
运行后若输入:ab4du5jkf8
则结果输出:458;*【*/
.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 '%s',0
outfmt BYTE '%c',0
s BYTE 80 DUP(?)
len DWORD ?
.code
start:
invoke scanf,addr infmt,addr s
mov al,0
lea edi,s-1
mov ecx,80
.repeat
inc edi
.untilcxz[edi]==al
lea eax,s
sub edi,eax
mov len,edi
mov edi,0
.while edi<len
.if s[edi]>=48&&s[edi]<=57
invoke printf,addr outfmt,s[edi]
.endif
inc edi
.endw
invoke ExitProcess,0
end start;*】*/
统计对角线元素之和并输出。以下程序运行后,首先输入一个小于10的整数n,
然后输入n行n列的整数矩阵,最后统计对角线元素(行列下标值相等或行列下标值之和等于n-1)之和并输出。
运行后若输入:
5
9 8 6 4 2
1 2 3 4 5
6 7 8 9 3
0 9 8 7 6
5 4 3 2 1
则结果输出:
47.386              ;选择的处理器
.model flat, stdcall        ;存储模型,Win32程序只能用平展(flat)模型
option casemap:none     ;指明标识符大小写敏感
includelib  msvcrt.lib  ;引用C库文件
scanf PROTO C:DWORD,:vararg ;C语言scanf函数原型声明
printf PROTO C:DWORD,:vararg    ;C语言printf函数原型声明
.data               ;⑤数据段
fmt     BYTE    '%d',0
Sum    DWORD 0
n      DWORD ?
Arr    DWORD 10 DUP(10 DUP (?))
.code
start:
invoke scanf,addr fmt,addr n
MOV ESI,0
MOV EBX,0
.WHILE ESI<n
MOV EDI,0
.WHILE EDI<n
pushA
invoke scanf,addr fmt,addr Arr[EBX+EDI*4]
popA
INC EDI
.ENDW
INC ESI
MOV EAX,n
SHL EAX,2
LEA EBX,[EBX+EAX]
.ENDW;*【*/
MOV ESI,0
MOV EBX,0
.WHILE ESI<n
MOV EDI,0
.WHILE EDI<nLEA EAX,[ESI+EDI+1]
.if ESI==EDI || EAX==n
mov EAX,Arr[EBX+EDI*4]
add  Sum,EAX
.endifINC EDI
.ENDW
INC ESI
MOV EAX,n
SHL EAX,2
LEA EBX,[EBX+EAX]
.ENDW;*】*/
invoke printf,addr fmt,Sum
ret
end start

Win32汇编练习(SMU—循环结构)相关推荐

  1. 【ARM】ARM汇编程序设计(三) 循环结构

    00. 目录 文章目录 00. 目录 01. 循环结构-死循环 02. 循环结构-累加和 03. 循环结构-循环输出 04. 循环结构-循环输出 05. 随机数 06. 综合应用一 07. 综合应用二 ...

  2. Win32汇编(SMU—子程序)

    编一函数MaxN(int a[],int n)用于求n个元素的数组a中的最大元素. 运行后输入: 1 3 4 5 2 则结果输出: 最大值为5 运行后输入: 1 3 6 4 5 2 则结果输出: 最大 ...

  3. Win32汇编(SMU—递归子程序)

    运行后若输入: 运行后若输入: 1 3 则结果输出: 则结果输出: A移1个盘到C A移1个盘到CA移1个盘到B 运行后若输入: C移1个盘到B 2 A移1个盘到C 则结果输出: B移1个盘到A A移 ...

  4. Win32汇编(SMU—C嵌入汇编)

    键盘输入任一个字符,然后以此字符填充数组a[41]. 注意:填充40个字符即可. 如: 运行后输入:A 则结果输出:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA#i ...

  5. 汇编-循环结构程序设计和子程序设计

    循环结构程序设计和子程序设计 实验内容 算法描述 实验结果 源程序清单 实验内容 设DATA1开始的内存单元中,存放着一串带符号字数据,要求采用冒泡排序算法(Bubble Sort)按照从小到大的顺序 ...

  6. 选择“Win32汇编”的三大理由?

    选择Win32汇编的理由是什么呢? 在DOS时代,学习汇编就是学习系统底层编程的代名词,仅要成为一名入门级的汇编程序员,就需要学习从CPU结构.CPU工作方式.各种硬件的编程方法到DOS工作方式等范围 ...

  7. C指针原理(23)-win32汇编及.NET调试

    2018-12-28 20:36:07 在WINDOWS系统能用到汇编的机会不多,基本都可以用C或C++代劳,更何况现在MICROSOFT的Visual Studio 系列工具非常强大,WINDOWS ...

  8. win32 汇编基础概念整理

    一.关于寄存器 寄存器有EAX,EBX,ECX,EDX,EDI,ESI,ESP,EBP等,似乎IP也是寄存器,但只有在CALL/RET在中会默认使用它,其它情况很少使用到,暂时可以不用理会. EAX是 ...

  9. win32汇编基础概念

    一.关于寄存器 寄存器有EAX,EBX,ECX,EDX,EDI,ESI,ESP,EBP等,似乎IP也是寄存器,但只有在CALL/RET在中会默认使用它,其它情况很少使用到,暂时可以不用理会. EAX是 ...

最新文章

  1. 《Linux From Scratch》第三部分:构建LFS系统 第八章:让LFS系统可引导 - 8.2. 创建 /etc/fstab 文件...
  2. 从智能客服说起,看小i机器人如何用AI赋能产业升级改造|M-TECH AI助力中国智造产业论坛...
  3. 【力荐】Select查询语句中LIKE关键词的优化方法分析
  4. Nutch使用方法简介
  5. 【CodeForces - 701D】As Fast As Possible(二分,模拟,数学公式)
  6. 单基因gsea_筛到5分的核心基因以后你可以怎么做?
  7. 解读设计模式----单例模式(Singleton Pattern)
  8. postscript怎么打开_怎么把在学习中用的Adobe PDF文件转换成Microsoft office Word
  9. 中汽中心软件测评中心与紫光国微达成芯片认证合作
  10. 数据结构试题期中期末考试【含答案】
  11. 编译原理 实验一 词法分析器设计
  12. 成渝城市群数据(空气质量、地图矢量、面板数据等)
  13. js+canvas 图片+文字合成
  14. UnityShder法线贴图
  15. 读论文-OVSeg-基于遮罩自适应CLIP的开放词汇语义分割-Open-vicabulr semantic segmentation with mask-adaptived CLIP
  16. C语言编程>第三周 ⑦ 将一个数组逆序输出。
  17. 被黑指数MAX?浅聊汽车钥匙安全
  18. Python爬虫HTTP异常:rllib.error.HTTPError: HTTP Error 418,伪装User-Agent以及fake-useragent插件的妙用
  19. aps软件中的运营管理至关重要
  20. Brison归因与代码

热门文章

  1. android Lottie详细使用
  2. c# aspx转为html,asp.net(c#)网页跳转七种方法小结
  3. 这波分享得你们都爱了吗?
  4. SBT下载特别慢的问题解决
  5. linux:Nginx+https双向验证(数字安全证书)
  6. 微信再次改版!这个功能终于要下线
  7. 布局数据存储,中国电子云意在何为?
  8. 进化:从孤胆极客到高效团队_极客历史记录的本周:Gmail公开,国际象棋获得深蓝胜利以及托马斯·爱迪生的诞生...
  9. STM32链接脚本STM32F407ZETx_FLASH.ld
  10. 【唐老狮】商业游戏开发前后端程序区别