《Intel汇编第5版》 条件汇编伪指令

一、条件汇编伪指令和宏使用可以使汇编程序更加灵活

  

二、通过伪指令来检查函数的参数是否为空,如果为空则输出警告信息

  

INCLUDE Irvine32.inc
includelib Irvine32.lib
includelib kernel32.lib
includelib user32.lib

.data

source    BYTE    "this is source string",0

.code
mWriteStr MACRO    string

    IFB <string>

        ECHO --------------------------------------
        ECHO * ERROR parameter missing in mWriteStr
        ECHO * no code generated
        ECHO --------------------------------------
        EXITM
    ENDIF

    push edx
    mov edx,offset string
    call WriteString
    pop edx
endm

main PROC
    ;mWriteStr source
    mWriteStr
    exit
main ENDP
END main

编译上面的程序时会输出警告信息:

C:\RadASM\Masm32\Bin\ML.EXE /c /coff /Cp /nologo /I"C:\RadASM\Masm32\Include" "MacroTest.asm"
 Assembling: MacroTest.asm
--------------------------------------
* ERROR parameter missing in mWriteStr
* no code generated
--------------------------------------
C:\RadASM\Masm32\Bin\LINK.EXE /SUBSYSTEM:CONSOLE /RELEASE /VERSION:4.0 /LIBPATH:"C:\RadASM\Masm32\Lib" /OUT:"MacroTest.exe" "MacroTest.obj"
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

构建完成.
总共编译时间 203 毫秒
时间: 2024-10-18 01:07:06

《Intel汇编第5版》 条件汇编伪指令的相关文章

《Intel汇编第5版》 汇编调用子过程

一.Call和Ret指令 二.在子过程中需要自己保存可能会修改掉的寄存器值,这里可以使用USES伪指令来生成 三.一个数组求和的汇编例子 1 TITLE Call a Proc Demo 2 INCLUDE Irvine32.inc 3 includelib Irvine32.lib 4 includelib kernel32.lib 5 includelib user32.lib 6 7 8 .data 9 array DWORD 1000h,2000h,3000h,4000h 10 11 .

《Intel汇编第5版》 汇编减法程序

第一步: 安装虚拟机32位XP系统 + RadAsm软件 第二步: 下载<Intel汇编语言程序设计第5版>中相关的源代码以及库文件 http://kipirvine.com/asm/examples/index.htm 将IrvineExamplesVS2008下载下来之后,解压出来inc和lib文件分别放在RadAsm的目录中 注:如果找不到路径,编译错误会提示你的, C:\RadASM\Masm32\Bin\ML.EXE /c /coff /Cp /nologo /I"C:\R

java如何实现类似c语言的条件汇编功能

所谓条件汇编,就是依据所设定的条件,使汇编器汇编某一段程序,或不汇编某一段程序.例如在java中,在开发阶段可能要输出一些调试语句,而在项目正式运行时这些测试的语句不应该输出(当然,你又可能说可以使用log4j). 例如有下面的一段代码: public class HelloWorld { public static void main(String[] args) { final boolean debug = true; if(debug){ System.out.println("这是调试

ARM汇编的一般形式和汇编调用C语言

.text //代码段.global _start //表明程序入口_start: //入口函数 BL main //跳转到c语言中的main,不一定要转跳到main,也可以执行其他的汇编指令 一般工程中,纯汇编复杂,而且效率比C语言并没有提高多少,所以在没有操作系统的工程中,最好的开发方式就是用汇编调用C语言,使用C语言来完成所需要的工作(只有在对效率要求极高的时候才会使用汇编编写代码块),当然裸机开发没有现成的库,就算是简单的printf函数也是没法调用的,其实就是就是汇编的高级语言版本.个

没有规定哪种汇编?那就用x86汇编

c语言转化为汇编语言 把下面的 C 代码转换成汇编代码.数组 a 和 b 分别 存放在以 0x4000 和 0x5000 为起始 地址的存储区内,类 型为 long(即 32 位 ) . 把编写的汇编语言进行编译连接, 并进 行调试.for (i=0; i<8; i++){ a[i] = b[7-i];} 没有规定哪种汇编?那就用x86汇编,最简单代码,意思一下好了... 假设ds已指向资料段 push ds pop es ;对齐ds和esmov edi,4000h  ;a数组地址起点mov e

汇编知识扫盲之16位汇编跟32位汇编的保护模式以及汇编代码编写

汇编知识扫盲之16位汇编跟32位汇编的保护模式以及汇编代码编写 一丶内存寻址模型 逻辑地址.线程地址.物理地址 了解汇编之前.先了解一下上面这些词的含义; 逻辑地址: 这个是邮编一起生成的.逻辑地址一般都是 段加段内偏移组成的.每个进程独享. 线性地址: 由分段管理机制.将逻辑地址转化为线性地址.这个了解即可.学过内核的人看到应该明白.如果没有学过.简单滤过即可(32位下逻辑 = 线性) 物理地址: 通过分页管理机制(内核中成为PDE PTE等页目录 页表等等)将线性地址转化为物理地址. 这些了

《Intel汇编第5版》 Intel CPU小端序

一.MASM汇编器中的数据类型 二.Intel汇编中的立即数类型 三.定义有符号和无符号整数 四.小端序 内存中数据按照字节存储,一个4个字节无符号整数,其高位存储在低地址上,低位存储在高地址上. 比如0x12345678这个整数,在内存中按照内存地址从小往大排列是:0X78 0x56 0x34 0x12 五.汇编代码验证 INCLUDE Irvine32.inc includelib Irvine32.lib includelib kernel32.lib includelib user32.

《Intel汇编第5版》 Mov指令

一.Mov用于数据传送,用法如下: 二.当传送的数据和目标数据位宽不一致的时候,需要使用MOVZX.MOVSX扩展.MOVZX使用0填充高位,MOVSX使用源操作数最高位填充 下面是汇编代码演示: INCLUDE Irvine32.inc includelib Irvine32.lib includelib kernel32.lib includelib user32.lib .code ;无符号类型 var1 DWORD 12345678h ;有符号类型 var2 SDWORD 1234567

Intel格式和AT&amp;T格式汇编区别

一.AT&T 格式Linux 汇编语法格式 在 AT&T 汇编格式中,寄存器名要加上 '%' 作为前缀:而在 Intel 汇编格式中,寄存器名不需要加前缀.例如: AT&T 格式 Intel 格式 pushl %eax push eax 2.         在 AT&T 汇编格式中,用 '$' 前缀表示一个立即操作数:而在 Intel 汇编格式中,立即数的表示不用带任何前缀.例如: AT&T 格式 Intel 格式 pushl $1 push 1 3.