《汇编语言 基于x86处理器》第八章高级过程部分的代码 - 两种规范计算数组元素的和
▶ 输入 Count 个 32 位有符号整数,计算他们的和
● 代码,使用堆栈传参
;// Sum_main.asm,主过程
INCLUDE Irvine32.inc EXTERN PromptForIntegers@0:PROC ; 外部链接声明需要的函数
EXTERN ArraySum@0:PROC, DisplaySum@0:PROC ArraySum EQU ArraySum@0 ; 外部链接声明需要的变量
PromptForIntegers EQU PromptForIntegers@0
DisplaySum EQU DisplaySum@0 Count = ; 输入的变量数 .data
prompt1 BYTE "Enter a signed 32-bit integer: ",
prompt2 BYTE "Sum: ",
array DWORD Count DUP(?)
sum DWORD ? .code
main PROC
call Clrscr ; 清屏 ; PromptForIntegers( addr prompt1, addr array, Count ),提示信息和输入整数
push Count
push OFFSET array
push OFFSET prompt1
call PromptForIntegers ; eax = ArraySum( addr array, Count ),数组求和
push Count
push OFFSET array
call ArraySum
mov sum,eax ; DisplaySum( addr prompt2, sum ),输出结果
push sum
push OFFSET prompt2
call DisplaySum call Crlf
call WaitMsg
exit
main ENDP
END main
;// _prompt.asm,提示信息和输入整数
INCLUDE Irvine32.inc .code
PromptForIntegers PROC
arraySize EQU [ebp+] ; 获取参数
ptrArray EQU [ebp+]
ptrPrompt EQU [ebp+]
enter ,
pushad mov ecx, arraySize
cmp ecx,
jle L2
mov edx, ptrPrompt
mov esi, ptrArray L1:
call WriteString
call ReadInt
call Crlf
mov [esi], eax
add esi,
loop L1 L2:
popad
leave
ret ; 3 个参数
PromptForIntegers ENDP
END
;// _arrysum.asm,数组求和
INCLUDE Irvine32.inc .code
ArraySum PROC
ptrArray EQU [ebp+]
arraySize EQU [ebp+]
enter ,
push ecx
push esi mov eax, ; 使用循环对数组求和,放入 eax
mov esi, ptrArray
mov ecx, arraySize
cmp ecx,
jle L2 L1:
add eax, [esi]
add esi,
loop L1 L2:
pop esi
pop ecx
leave
ret
ArraySum ENDP
END
;// _display.asm,输出结果
INCLUDE Irvine32.inc .code
DisplaySum PROC
theSum EQU [ebp+]
ptrPrompt EQU [ebp+]
enter ,
push eax
push edx mov edx, ptrPrompt
call WriteString
mov eax, theSum
call WriteInt
call Crlf pop edx
pop eax
leave
ret
DisplaySum ENDP
END
● 代码,使用伪指令 PROTO 和 INVOKE 传参
;// Sum_main.asm,主过程
INCLUDE sum.inc ; 需要头文件 Count = .data
prompt1 BYTE "Enter a signed 32-bit integer: ",
prompt2 BYTE "Sum: ",
array DWORD Count DUP(?)
sum DWORD ? .code
main PROC
call Clrscr INVOKE PromptForIntegers, ADDR prompt1, ADDR array, Count ; 3 个过程直接传参 INVOKE ArraySum, ADDR array, Count
mov sum, eax INVOKE DisplaySum, ADDR prompt2, sum call Crlf
call WaitMsg
exit
main ENDP
END main
;// _prompt.asm,提示信息和输入整数
INCLUDE sum.inc .code
PromptForIntegers PROC, ptrPrompt:PTR BYTE, ptrArray:PTR DWORD, arraySize:DWORD
pushad ; 不用 enter 和 leave mov ecx, arraySize
cmp ecx,
jle L2
mov edx, ptrPrompt
mov esi, ptrArray L1:
call WriteString
call ReadInt
call Crlf
mov [esi], eax
add esi,
loop L1 L2:
popad
ret
PromptForIntegers ENDP
END
;// _arrysum.asm,数组求和
INCLUDE sum.inc
.code ArraySum PROC, ptrArray:PTR DWORD, arraySize:DWORD
push ecx
push esi mov eax,
mov esi, ptrArray
mov ecx, arraySize
cmp ecx,
jle L2 L1:
add eax, [esi]
add esi,
loop L1 L2:
pop esi
pop ecx
ret
ArraySum ENDP
END
;// _display.asm,输出结果
INCLUDE Sum.inc .code
DisplaySum PROC, ptrPrompt:PTR BYTE, theSum:DWORD
push eax
push edx mov edx, ptrPrompt
call WriteString
mov eax, theSum
call WriteInt
call Crlf pop edx
pop eax
ret
DisplaySum ENDP
END
;// sum.inc,头文件
INCLUDE Irvine32.inc PromptForIntegers PROTO, ptrPrompt:PTR BYTE, ptrArray:PTR DWORD, arraySize:DWORD ArraySum PROTO, ptrArray:PTR DWORD, count:DWORD DisplaySum PROTO, ptrPrompt:PTR BYTE, theSum:DWORD
《汇编语言 基于x86处理器》第八章高级过程部分的代码 - 两种规范计算数组元素的和的更多相关文章
- 《汇编语言 基于x86处理器》前五章的小程序
▶ 书中前五章的几个小程序,基本的运算操作,使用了作者的库 Irvine32 和 Irvine64(一开始以为作者网站过期了,各网站上找到的文件大小都不一样,最后发现是要搭梯子 Orz,顺利下载).注 ...
- 《汇编语言 基于x86处理器》第十三章高级语言接口部分的代码 part 2
▶ 书中第十三章的程序,主要讲了汇编语言和 C/++ 相互调用的方法 ● 代码,汇编中调用 C++ 函数 ; subr.asm INCLUDE Irvine32.inc askForInteger P ...
- 《汇编语言 基于x86处理器》第十章 - 运行一个 16位实地址汇编程序
▶ 书上第 10 章,主要讲了宏,引用了一个 16 位实地址的程序,从代码开始到运行 ● 代码 ; main.asm INCLUDE Macros.inc IF IsDefined( RealMode ...
- 《汇编语言 基于x86处理器》第十二章浮点数部分的代码
▶ 书中第十二章的程序,主要讲了 FPU 的指令和浮点数计算的过程 ● 代码,简单的 32 为浮点数测试 INCLUDE Irvine32.inc INCLUDE macros.inc .data f ...
- 《汇编语言 基于x86处理器》第七章整数运算部分的代码
▶ 书中第七章的程序,使用各种位移运算,加深了对内存.寄存器中整数类型变量存储的认识 ● 代码,双字数组右移 4 位 INCLUDE Irvine32.inc COUNT = ; 右移位数 .data ...
- 《汇编语言 基于x86处理器》第六章条件处理部分的代码
▶ 书中第六章的程序,使用了条件判断和跳转来实现一些功能 ● 代码,查找数组首个非零值 INCLUDE Irvine32.inc .data intArray SWORD , , , , , , , ...
- 《汇编语言 基于x86处理器》第十一章 MS-DOS 编程部分的代码 part 2
▶ 书中第十一章的程序,主要讲了 Windows 接口,在小黑框中进行程序交互 ● 在屏幕指定位置输出带自定义属性的文字 INCLUDE Irvine32.inc .data outHandle HA ...
- 《汇编语言 基于x86处理器》第十章结构和宏部分的代码
▶ 书中第十章的程序,主要讲了结构与宏的使用 ● 代码,使用结构,对比是否对齐的性能差距 INCLUDE Irvine32.inc INCLUDE macros.inc structN STRUCT ...
- 《汇编语言 基于x86处理器》第九章字符串与数组部分的代码
▶ 书中第九章的程序,主要讲了字符串相关的输入.输出,以及冒泡排序.二分搜索 ● 代码,Irvine32 中的字符串库函数代码范例 INCLUDE Irvine32.inc .data str1 BY ...
随机推荐
- 放一个Dynamicinputs corresponding to Dynamicknobs的Node源码
static const char* const CLASS = "AddInputsSol"; static const char* const HELP = "Add ...
- VSFTP再配置 我里个去马蛋网上这么多烂文章,走了好多弯路
1.CentOS 进行yum 安装 vsftpd 2.vi /etc/vsftpd/vsftpd.conf 进行配置 3.创建FTP 用户 # useradd –d /var/www -g ftp ...
- 什么是词性标注(POS tagging)
词性标注也叫词类标注,POS tagging是part-of-speech tagging的缩写. 维基百科对POS Tagging的定义: In corpus linguistics, part-o ...
- VUEX 学习
语法 翻译 功能介绍 module(模块)extend(扩展)extract(提取)export(输出)router(路由器)components(组件) store(储存)state (声明. ...
- Temporary ASP.NET Files\root 空间增长太快
估计是虚拟目录有新的文件,造成项目重新被编译要么把新文件放到另一个目录,要么使用web application而不是web project
- Ubuntu 14.04不显示标题栏和侧边栏
Ubuntu 14.04不显示标题栏和侧边栏 进入桌面后 Ctrl + Alt + F1 切换到 tty1,登录,然后运行: sudo apt-get install unity lightdm重启即 ...
- pandas.DataFrame 插入列和行
转载:www.360doc.com/content/17/0225/23/1489589_632032302.shtml 以csv实例文件操作插入DataFrame的行和列 文件名:example.c ...
- react路由嵌套
所谓的嵌套路由就是在某些以及路由下面存在二级路由,这些二级路由除了公用一级路由导航模块外,还公用当前的二级路由的导航模块,也就是部分进行了切换,要实现嵌套路由,首先回顾之前的内容,实现基本的react ...
- 【ZZ】终于有人把云计算、大数据和人工智能讲明白了!
终于有人把云计算.大数据和人工智能讲明白了! https://mp.weixin.qq.com/s/MqBP0xziJO-lPm23Bjjh9w 很不错的文章把几个概念讲明白了...图片拷不过来... ...
- [转][CEF]自动播放视频
1.CEF 默认不支持 mp4,可以在网上下载热心网友提供的修改版. 查看支持的特性的方法:在 CEF 中访问网页 :http://html5test.com/ 2. 打开网页后视频自动播放: mut ...