▶ 书中第六章的程序,使用了条件判断和跳转来实现一些功能 ● 代码,查找数组首个非零值 INCLUDE Irvine32.inc .data intArray SWORD , , , , , , , -, , , ; 测试用的数组 ;intArray SWORD 1, 0, 0, 0 ;intArray SWORD 0, 0, 0, 0 ;intArray SWORD 0, 0, 0, 1 noneMsg BYTE .code main PROC mov ebx, OFFSET intArray…
▶ 书中第十二章的程序,主要讲了 FPU 的指令和浮点数计算的过程 ● 代码,简单的 32 为浮点数测试 INCLUDE Irvine32.inc INCLUDE macros.inc .data first REAL8 . second REAL8 . third REAL8 ? .code main PROC finit ; 初始化 FPU fld first fld second call ShowFPUStack ; 展示栈中的浮点数 mWrite "Please enter a rea…
▶ 书中第十三章的程序,主要讲了汇编语言和 C/++ 相互调用的方法 ● 代码,汇编中调用 C++ 函数 ; subr.asm INCLUDE Irvine32.inc askForInteger PROTO C showInt PROTO C, value:SDWORD, outWidth:DWORD OUTPUT_WIDTH = MAX_POWER = .data intVal DWORD ? .code SetTextOutColor PROC C, color:DWORD mov eax…
▶ 书中第十一章的程序,主要讲了 Windows 接口,在小黑框中进行程序交互 ● 在屏幕指定位置输出带自定义属性的文字 INCLUDE Irvine32.inc .data outHandle HANDLE ? cellsWritten DWORD ? ; 输出计数(输出参数) xyPos COORD <,> ; 输出坐标 buffer BYTE 41h,42h,43h,44h,45h,46h,47h,48h,49h,4Ah,4Bh,4Ch,4Dh,4Eh,4Fh,50h,51h,52h,5…
▶ 书中第七章的程序,使用各种位移运算,加深了对内存.寄存器中整数类型变量存储的认识 ● 代码,双字数组右移 4 位 INCLUDE Irvine32.inc COUNT = ; 右移位数 .data array DWORD 148B2165h, 8C943A29h, 6DFA4B86h, 91F76C04h, 8BAF9857h .code main PROC mov esi, OFFSET array ; 移之前的情况 mov ecx, LENGTHOF array mov ebx, TYP…
▶ 书中前五章的几个小程序,基本的运算操作,使用了作者的库 Irvine32 和 Irvine64(一开始以为作者网站过期了,各网站上找到的文件大小都不一样,最后发现是要搭梯子 Orz,顺利下载).注意编译前将相关的库文件放到 “项目属性 → 链接器 → 输入 → 附加依赖项” 中. ● 代码,整数数组求和 . .model flat,stdcall .stack ExitProcess PROTO, dwExitCode: dword .data array DWORD 10000h, 200…
▶ 输入 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@…
▶ 书中第九章的程序,主要讲了字符串相关的输入.输出,以及冒泡排序.二分搜索 ● 代码,Irvine32 中的字符串库函数代码范例 INCLUDE Irvine32.inc .data str1 BYTE str2 BYTE msg0 BYTE msg1 BYTE msg2 BYTE msg3 BYTE msg4 BYTE msg5 BYTE .code main PROC mov edx, OFFSET str1 call WriteString call crlf call trim_str…
▶ 书上第 10 章,主要讲了宏,引用了一个 16 位实地址的程序,从代码开始到运行 ● 代码 ; main.asm INCLUDE Macros.inc IF IsDefined( RealMode ) INCLUDE Irvine16.inc ELSE INCLUDE Irvine32.inc ENDIF .code main PROC Startup IF IsDefined( RealMode ) mWrite <"The program is running in 16-bit…
▶ 书中第十章的程序,主要讲了结构与宏的使用 ● 代码,使用结构,对比是否对齐的性能差距 INCLUDE Irvine32.inc INCLUDE macros.inc structN STRUCT ; 非对齐的结构 Lastname BYTE DUP() Years WORD SalaryHistory DWORD , , , structN ENDS ; 48 Byte structA STRUCT ; 对齐的结构 Lastname BYTE DUP() ALIGN WORD ; +2 Ye…