首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

只有EAX的下半部分是归零的?(使用.486 / .model平台的MASM,标准调用)

在使用.486 / .model平台的MASM,标准调用中,只有EAX的下半部分是归零的。这意味着EAX寄存器的高16位保持不变,而低16位被设置为零。

MASM是一种汇编语言,.486和.model是MASM的指令,用于指定汇编程序的目标处理器和模型。

EAX寄存器是x86架构中的通用寄存器之一,它是一个32位寄存器,可以用于存储数据和执行算术操作。EAX寄存器的下半部分是指低16位,即AX寄存器。

在标准调用中,函数的返回值通常存储在EAX寄存器中。因此,只有EAX的下半部分是归零的意味着函数返回的值的高16位保持不变,而低16位被设置为零。

这种特性在某些情况下可能会有用,例如在需要使用EAX寄存器存储一个16位的无符号整数时,可以先将EAX寄存器清零,然后再将低16位设置为所需的值。

关于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,无法给出相关链接。但腾讯云作为一家知名的云计算服务提供商,提供了丰富的云计算产品和解决方案,可以通过腾讯云官方网站进行了解和查询。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

5.1 汇编语言:汇编语言概述

本章中所提到汇编语言为Windows汇编,在Windows平台下读者可使用MASM工具对汇编语言进行编译测试,也可以使用通用集成开发环境实现编译,笔者推荐使用RadASM工具,RadASM 一个面向汇编编程开发环境...其中p则代表将代码对齐到32位指令上,接着看第二行.model flat, stdcall此处代表了调用约定采用stdcall模式,并设置代码和数据段都使用平坦模型(flat model)来处理内存,...;WriteFile函数用于向文件或其他输出设备写入数据;crt_scanf和crt_printf格式化输入/输出函数,这些库函数调用都可以使用invoke这个伪指令来实现,invokeMASM中提供调用关键字...使用masm32.inc中这些宏,可以方便地将输入输出重定向到控制台或文件中,而无需直接调用Windows API函数。...下面一些示例代码,使用masm32.inc头文件来实现标准输入输出: .386 .model flat, stdcall include masm32.inc include kernel32

36820

5.1 汇编语言:汇编语言概述

本章中所提到汇编语言为Windows汇编,在Windows平台下读者可使用MASM工具对汇编语言进行编译测试,也可以使用通用集成开发环境实现编译,笔者推荐使用RadASM工具,RadASM 一个面向汇编编程开发环境...,其中p则代表将代码对齐到32位指令上,接着看第二行.model flat, stdcall此处代表了调用约定采用stdcall模式,并设置代码和数据段都使用平坦模型(flat model)来处理内存...分别代表标准输入流和标准输出流;WriteFile函数用于向文件或其他输出设备写入数据;crt_scanf和crt_printf格式化输入/输出函数,这些库函数调用都可以使用invoke这个伪指令来实现...,invokeMASM中提供调用关键字,使用它可实现调用各类API函数目的。...下面一些示例代码,使用masm32.inc头文件来实现标准输入输出: .386 .model flat, stdcall include masm32.inc include

50550
  • Win32汇编:汇编版PE结构解析器

    ,显然可执行文件格式操作系统工作方式写照,不同系统之间文件格式千差万别,从而导致不同系统中可执行文件无法跨平台运行.PE文件基本结构如下所示,在PE文件中,代码,已初始化数据,资源和重定位信息等数据被按照属性分类放到不同...◆DOS头结构◆从上面的PE结构图中,PE文件开头部分包括了一个标准DOS可执行文件结构,这看上去有些奇怪,但是这对于可执行文件向下兼容性来说却是不可缺少.操作系统识别可执行文件方法按照文件格式而不是扩展名来识别的...,则系统一定会崩盘,为了避免这一情况发生,PE文件头部依然包括一个标准DOS_MZ格式可执行部分,这样万一在DOS下执行PE文件,那么系统会弹出一个提示This program cannot be...,过程:读入文件,判断第一个字符是不是MZ,如果MZ,则在判断e_lfanew指针指向地址是不是PE如果,则说明这是PE文件.下面的代码,则用于读取PE文件一些关键区块信息..386.model...,例如预处理,重定位等,装入以后页面位置,偏移等都会随之发生改变,Windows装载器在装载DOS部分,PE文件头部分和节表部分时不进行任何处理,而装载节时候将根据节属性做不同处理..386.model

    34420

    Win32汇编:汇编版PE结构解析器

    PE格式Windows系统下最常用可执行文件格式,有些应用必须建立在了解PE文件格式基础之上,如可执行文件加密与解密,文件型病毒查杀等,熟练掌握PE文件结构,有助于软件分析....PE格式中DOS部分由MZ格式文件头和可执行代码部分组成,可执行代码被称为DOS块(DOS stub).MZ格式文件头由IMAGE_DOS_HEADER结构定义,以下就是DOS头部分关键属性....,过程:读入文件,判断第一个字符是不是MZ,如果MZ,则在判断e_lfanew指针指向地址是不是PE如果,则说明这是PE文件....解析各区块信息 下面的代码,则用于读取PE文件一些关键区块信息. .386 .model flat,stdcall option casemap:none include windows.inc...,而PE加载则会处理一些其他数据,例如预处理,重定位等,装入以后页面位置,偏移等都会随之发生改变,Windows装载器在装载DOS部分,PE文件头部分和节表部分时不进行任何处理,而装载节时候将根据节属性做不同处理

    28940

    汇编语言学习笔记-创建最基本windows窗体

    ,请暂且不要再看本系列其他文章了,先学学WINDOWS API相关知识吧 3 以上代码摘自一个汇编语言全接触CHM 一个名叫Lxx前辈翻译 4 希望得到大家支持 .386 .model...flat,stdcall;内存平坦,参数传递约定 option casemap:none;大小写敏感 ;;;;;;引用一些必要数据 include D:\masm32\include\windows.inc...include D:\masm32\include\user32.inc includelib D:\masm32\lib\user32.lib include D:\masm32\...;;;;;;代码段 .CODE start: ;程序入口与end start对应 invoke GetModuleHandle,NULL;调用API函数获取应用程序句柄并把句柄存入eax寄存器...,CommandLine,SW_SHOWDEFAULT;调用子函数,也就是前面我们定义函数 invoke ExitProcess,eax;退出程序 WinMain proc hInst:HINSTANCE

    59430

    Win32汇编:汇编版PE结构解析器

    PE格式Windows系统下最常用可执行文件格式,有些应用必须建立在了解PE文件格式基础之上,如可执行文件加密与解密,文件型病毒查杀等,熟练掌握PE文件结构,有助于软件分析.<!...,并且以4kb粒度进行对齐,这个4kb也就是一个页面的大小,而每个页面又分别具有,可执行,可读写等属性.PE格式中DOS部分由MZ格式文件头和可执行代码部分组成,可执行代码被称为DOS块(DOS...; DOS代码入口IPmovzx eax,[esi].e_lfanew ; 指向了PE文件开头(重要)第一个字段e_magic被定义为MZ,标志着DOS文件开头部分,最后一个字段e_lfanew...,过程:读入文件,判断第一个字符是不是MZ,如果MZ,则在判断e_lfanew指针指向地址是不是PE如果,则说明这是PE文件.解析各区块信息下面的代码,则用于读取PE文件一些关键区块信息..386...,而PE加载则会处理一些其他数据,例如预处理,重定位等,装入以后页面位置,偏移等都会随之发生改变,Windows装载器在装载DOS部分,PE文件头部分和节表部分时不进行任何处理,而装载节时候将根据节属性做不同处理

    28120

    32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数

    32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数 一丶32位汇编编写Windows窗口程序 首先我们知道32位汇编可以调用Windows API,那么今天我们就调用...确定点文件大,不容易维护,优点,这个程序任何windows平台上,都能运行,不管你有没有dll 关于静态加载,和动态加载,在下面的调用C库函数中讲解 三丶动态和静态使用C库函数 1.首先是动态使用...   动态使用我们需要加上 msvcrt.inc然后还需要msvcrt.lib .inc 我们知道存函数声明, 而.lib则是存放dll路径,以及导出函数 例子: .386 .model...Call后面则不一样,表明调用Dll中,然后看下面的代码,有个 add ESP,0X8,则表明strcpy一个C调用约定 因为C调用约定必须外面平栈 2.静态使用 静态使用,则用libc.lib...,这里面存放了代码,但是需要注意一下,我们提供工具 MASM32有这个, 而VC++6.0中也有,VS系列也有,至于使用那个版本,就看环境变量谁在前边了,(最好不用MASM32) MASM32libC

    1.5K80

    在gcc中使用intel风格内联汇编

    很简单,内联汇编使用asm(“.intel_syntax noprefix/n”)声明一下,以后内联汇编就可以用intel风格了,构建可执行文件时给gcc加上-masm=intel参数。....intel_syntax,它保持了原样,而代码中a原本是个局部变量,只有在函数运行时它才会动态在栈上分配,使用ebp加上偏移量来访问它,这就是问题所在。...因为全局变量变量名会保存在符号表中,所以如果要在内联汇编中使用变量名,也只能使用全局变量变量名。...要这么做,就得了解gcc编译时如何为函数分配栈,以及调用函数时寄存器约定是怎样。...另一个注意地方printf调用: movl -8(%ebp), %eax movl %eax, 4(%esp) movl $

    3K20

    第 1 课:计算机如何计算 1+1=2

    初学者在学习这些内容时,一般会经历以下五个阶段: 了解编程基础,熟悉运行环境,学习使用开发工具,创建第一个项目 学习 js 语言,它是小游戏开发中最主要编程语言 学习微信小游戏官方组件和平台提供接口...笔者道,浏览器别打岔,V8 你继续讲,使用 masm 干了什么? v8 道,masm 提供了很多方法,可以理解为和 js 语法能力一一对应。js 语句是什么,就调用对应 masm 方法。...例如 1+1 这句代码,对应调用 masm C++ 代码这样: #define __ masm.__ mov eax 1// 在这里__一个宏// 在预处理之后将被统一替换为 masm.//...V8,浏览器给你 js 代码,你读一行调用 masm 转化一行,还是读完了统一调用 masm 再转化? V8 道,统一转化,但这一切都是在内存那里折腾。...CPU 态度很诚恳,并不像在拍人类马屁。只有一种解释,那就是 CPU 人类科学家设计

    1.9K20

    JS如何计算 1+1=2

    浏览器显得一个见多识广的人。要知道全世界www网页都展示都在他上面显示,他真的见多识广。 但作者不喜欢浏览器自作聪明,“浏览器别打岔,v8你继续讲,使用masm干了什么?”...v8道:“masm提供了很多方法,基本和js一一对应,js语句是什么,就调用对应masm方法。...例如1+1这名js代码,对应调用masmC++代码这样: #define __ masm. __ mov(eax, 1) //在这里 __ 一个宏,在预处理之后将被统一替换为“masm.”。...v8,浏览器给你js代码,你读一行调用masm转化一行,还是读完了一起调用masm再转化?” v8说:“一起转化,但这一切都是在内存那里折腾。...只有当x、y状态全为关,电路才是通。 与非门可以由开关设计组成,异或门也可以由开关组成。

    1.9K20

    5.10 汇编语言:汇编过程与结构

    在通常情况下ESP可变,随着栈生成而逐渐变小,而EBP寄存器固定只有当函数调用后,发生入栈操作而改变。...此处读者需要注意,这两条伪指令并非汇编语言中所兼容,而是MASM编译器为我们提供一个宏,MASM部分,它允许程序员使用汇编语言定义过程(函数)可以像标准汇编指令一样使用。...因此,调用函数需要知道子函数在堆栈上分配内存大小,并在调用子函数之前向堆栈提交额外空间。调用函数可以使用add esp, N指令来恢复堆栈指针位置,其中 N 调用函数在堆栈上分配内存大小。...crt_printf,addr szFmt,eax int 3 main ENDP END main 当然了如果读者认为自己维护堆栈很繁琐,则此时可以直接使用MASM汇编器提供...在使用USES和ENTER指令时,需要了解这些指令在具体平台支持情况,以及它们适用调用约定。通常情况下,在函数开头,我们将使用ENTER创建堆栈帧,然后使用USES指定需要保护寄存器。

    22020

    5.10 汇编语言:汇编过程与结构

    在通常情况下ESP可变,随着栈生成而逐渐变小,而EBP寄存器固定只有当函数调用后,发生入栈操作而改变。执行PUSH压栈时,堆栈指针自动减4,再将压栈值复制到堆栈指针所指向内存地址。...此处读者需要注意,这两条伪指令并非汇编语言中所兼容,而是MASM编译器为我们提供一个宏,MASM部分,它允许程序员使用汇编语言定义过程(函数)可以像标准汇编指令一样使用。...因此,调用函数需要知道子函数在堆栈上分配内存大小,并在调用子函数之前向堆栈提交额外空间。调用函数可以使用add esp, N指令来恢复堆栈指针位置,其中 N 调用函数在堆栈上分配内存大小。...如下这段汇编代码中笔者分别实现了两种调用方式,其中MyProcA函数一种被调用者平栈,由于调用者并没有堆栈修正所以需要在函数内部通过使用ret 12方式平栈,之所以是12是因为我们使用了三个局部变量...在使用USES和ENTER指令时,需要了解这些指令在具体平台支持情况,以及它们适用调用约定。通常情况下,在函数开头,我们将使用ENTER创建堆栈帧,然后使用USES指定需要保护寄存器。

    44220

    新版本RadAsm编译环境配置

    注意,要记住你安装文件夹.否则安装完你可能找不到.因为不会再桌面创建快捷方式. 不过你可以在开始菜单中找到(WIN10) Masm32编译器安装 想使用RadAsm就必须安装Masm32....RadAsm只是一个IDE.当然你如果想写别的汇编,可以使用不同asm.比如我这里使用 inter汇编.也就是Masm ?...选项->编程语言->选择你masm,并且在 RadAsm根目录下找到masm.ini选择添加进行配置 ? 这一步跟着github上说去做.做完这一步你编写完工程不能直接编译....一个你刚刚安装好 Masm32根路径,比如我在盘符 "G"下面安装,我就选择这个 另一个调试器.因为编写32位汇编.所以我选择 x32Dbg.exe路径....mov eax,eax ret end start 添加之后就可以编译执行了,如下图所示 ?

    2.3K30

    在CC++直接插入汇编代码方法-内联汇编

    博主昵称:一拳必胜客 博主主页面链接:博主主页传送门 博主专栏页面连接:专栏传送门–计算机考研 创作初心:本博客初心每天分享记录自己学习脚步,和各位技术友探讨交流,同时给同样感兴趣朋友以参考...基础讲解 因为在Visual C++中使用内联汇编不需要额外编译器和联接器,且可以处理Visual C++中不能处理一些事情,同时可以使用在C/C++中变量,所以非常方便。...内联汇编代码不易于移植,如果你程序打算在不同类型机器(比如x86和Alpha)上运行,应当尽量避免使用内联汇编,这时可以使用MASM,因为MASM支持更方便宏指令和数据指示符。...__asm语法 __asm关键字用来调用内联汇编,可以出现在任何合法C或C++声明中。...如果没有括号,编译器就不能确定汇编代码结束和C或C++代码起始位置。 另外,由于大括号里语句和一般MASM语句格式一样,所以可以很方便地从现有的MASM源程序里复制。

    1.5K30

    Win32汇编:常用系统API函数

    熟练掌握Win32 API函数参数传递,软件逆向基础,本章节内容将使用MASM汇编器,逐个编译这些源程序,你可以通过使用一些调试工具,这里推荐OllyDBG来附加编译后可执行文件,进行逐个分析,...ENDPEND main锁定/解锁内存: 程序需要使用这块内存可以将其锁定,使用完后可以解除锁定..datalpMemory DWORD ?...; 返回每扇区字节数mov eax,lpNumb ; 返回未使用数量mov eax,lpTota ; 返回簇总数invoke ExitProcess,0main ENDPEND...函数.endifinvoke FreeLibrary,hLibMod ; 传递句柄,并释放dllretmain endpend main◆远程线程DLL注入◆动态调用函数: 动态加载并使用一个函数...,0 ; 调用信息框ret_RemoteThread endp◆创建Windows钩子◆创建DLL文件: hookdll.dll.386 .model flat,stdcall option

    1.1K30

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

    lea dx,str ;求得字符串地址 mov ah,9h ;调用21号功能9h功能进行打印 int 21h mov ah...一个MASM5.0 一个 DOSbox 0.74 下方附上链接 链接:https://pan.baidu.com/s/1O0-mUWv9fgvkqA_An1W0yA 密码:xzjd 使用DOSbox0.74...步骤 1.解压MASM5.0到你盘符 2.安装DosBox0.74 3.打开DosBox0.74 4.在DosBox中使用指令切换到你MASM盘符 例如: mount d: d:\MASM5.0...使用masm编译时候.确保asm放在masm目录下面. 结果演示. 四丶32位汇编代码编写.   32位汇编代码编写.可以使用RadAsm编写.博客中已经写过.我们主要讲解一下在VC中写法....例如: __asm { push eax push ebx pop eax pop ebx } 五丶64位汇编写法     64位汇编已经不支持我们使用内联汇编了

    1.9K20

    CC++:堆栈面面观

    使用gcc编译时候,-S选项可以生成汇编代码。但此时生成汇编代码AT&T风格,我们可以用-masm=intel生成intel风格汇编。...其通过gcc -S -masm=intel汇编之后汇编代码主要部分如下,注意不同版本gcc编译器,不同位数操作系统(32位或64位)其汇编代码可能不同,但大致意思相同。...给变量分配空间,可以看到只有两个赋值语句,说明我们int a因为没有初始化,所以实际不会被分配空间。...第三步不是必备操作,仅当函数中局部变量过多时会进行栈指针移动来分配更多空间,我们可以看到add函数开始部分没有这个操作。 接着看一下add函数结束部分。...本文不详述,有兴趣可以阅读《深入理解计算机系统》“链接”一章。 链接共享库 另外需要注意,如果你要链接共享库(动态库)不是标准库,并且不在标准路径下。那么在编译时候通常会报错。

    53020

    C++嵌入汇编语言计算有符号数组平均值

    使用“__asm”关键字既可以引导单条回汇编语言指令,也可以用空格在同一行分隔多个“__asm”引导汇编语言指令,更好方法使用花括号书写一个汇编语言程序片段。...嵌入汇编语言代码可以使用C++数据类型和数据对象,也可以使用MASM表达式和注释风格,但不可以使用MASM绝大多数伪指令和宏汇编方法。 在VC++中使用嵌入汇编还需要注意一些具体规定。...例如,在汇编语言编写函数中,不必保存EAX、EBX、ECX、EDX、ESI和EDI寄存器,但必须保存函数中使用其它寄存器(如ESP、EBP和整数标志寄存器等)。...嵌入式汇编语言语句中,可以使用汇编语言格式表示整数常量(如378H),也可以使用C++格式来进行表示(如0x378)。嵌入式汇编中标号和C++标号相似,它作用是在定义它函数中有效。...在VC++集成开发环境中,建立一个win32控制台程序项目,输入源代码后进行编译连接就可以产生一个可执行文件。需要注意:debug活动解决方案平台一定要选X86!不能够X64!

    1.9K10
    领券