win32汇编环境,怎么进行加法运算的

;运行效果

;win32汇编环境,怎么进行加法运算的

;基础知识,重新复习一下。

;首先需明白字节的概念。1个字节是8位,al和ah都是8位的,8位之中每位要么是0,要么是1,假如8位都是1,就是16进制的FF,也就是10进制的255,所以说al或ah最多为255,超过它就会报错。

;你输入mov al,256 然后编译,就会报错。但是输入mov al,255 就可以编译。

;假设两个相加的值都是255,结果肯定超过255,不管是al还是ah都放不下,那结果就放ax这儿。al和ah合起来就是ax,ax是双字节,有16位,如果16位全是1,那就是16进制的FFFF,也就是65535。

;我们常使用eax,有4字节,就是32位,一般够用了。

;直接抄进RadAsm可编译运行。重要部分加备注。

;下面为asm文件

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.386

.model flat,stdcall

option casemap:none

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; Include 文件定义

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

include windows.inc

include user32.inc

include kernel32.inc

includelib user32.lib

includelib kernel32.lib

; 自定义函数声明

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD ;对话框窗口函数

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; 数据段

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.data

DlgName db "MyDialog",0

szSucceesCap db "提示",0

szCheshi_template db "结果是 %d",0

.data?

hInstance HINSTANCE ?

.const

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; Equ 等值定义

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

ICO_MAIN equ 1000 ;图标

IDB01 equ 21

IDB02 equ 22

IDB03 equ 23

IDB04 equ 24

; 代码段

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.code

start:

invoke GetModuleHandle, NULL

mov hInstance,eax

invoke DialogBoxParam, hInstance, ADDR DlgName,NULL, addr DlgProc, NULL

invoke ExitProcess,eax

DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

LOCAL @Buffer[256]:byte

LOCAL @A:DWORD

.if uMsg == WM_INITDIALOG

invoke LoadIcon,hInstance,ICO_MAIN ;加载图标

invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax

.elseif uMsg==WM_COMMAND

mov eax,wParam

.if eax == IDB01

;以下为寄存器相加模式

mov eax,100

mov ebx,150

add eax,ebx ;相当于eax+ebx,再把结果放eax里面,eax与ebx可以反过来,如果反过来,则结果在ebx里

invoke wsprintf,addr @Buffer,addr szCheshi_template,eax ;相加的结果在eax里,所以这里放eax

invoke MessageBox,hWnd,addr @Buffer,addr szSucceesCap,MB_OK or MB_ICONINFORMATION

.elseif eax == IDB02

;以下为存储器相加模式

mov eax,200

mov @A,250 ;@A是前面定义的四字节变量地址,里面的值现在是250,那地址是多少,这个得由系统分配。写外挂的就是专门找这些地址,然后改动它,就可以改数据了。

add @A,eax ;相当于把@A这个内存地址里的值+eax,结果放@A地址里

invoke wsprintf,addr @Buffer,addr szCheshi_template,@A

invoke MessageBox,hWnd,addr @Buffer,addr szSucceesCap,MB_OK or MB_ICONINFORMATION

.elseif eax == IDB03

;以下为立即数相加模式

mov eax,400

add eax,450 ;450是立即数,相当于eax+450,然后把结果保存在eax里,这里两个数位置不能反过来,因为这种模式450这个值会固定在生成的exe文件里,不能改动它。

invoke wsprintf,addr @Buffer,addr szCheshi_template,eax

invoke MessageBox,hWnd,addr @Buffer,addr szSucceesCap,MB_OK or MB_ICONINFORMATION

.endif

.elseif uMsg == WM_CLOSE

invoke EndDialog, hWnd,NULL

.else

mov eax,FALSE

ret

.endif

mov eax,TRUE

ret

DlgProc endp

end start

;下面为rc文件内容

#include "resource.h" //提示缺少该文件,可以在资源里下载

#define ICO_MAIN 1000 //图标

#define IDB01 21

#define IDB02 22

#define IDB03 23

#define IDB04 24

ICO_MAIN ICON "Main.ico"

//定义对话框

MyDialog DIALOG 10, 10, 190, 90

STYLE DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX |

WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK

CAPTION "对话框程序模版"

BEGIN

CTEXT "100 + 150 = ?", -1, 5, 20, 70, 19

CTEXT "200 + 250 = ?", -1, 5, 40, 70, 19

CTEXT "400 + 450 = ?", -1, 5, 60, 70, 19

PUSHBUTTON "点我看寄存器加法结果", IDB01, 70,18,100,12

PUSHBUTTON "点我看存储器加法结果", IDB02, 70,37,100,14

PUSHBUTTON "点我看立即数加法结果", IDB03, 70,56,100,14

END

相关推荐
艾莉丝努力练剑14 小时前
深入详解编译与链接:翻译环境和运行环境,翻译环境:预编译+编译+汇编+链接,运行环境
c语言·开发语言·汇编·学习
Hello Mr.Z14 小时前
RISCV——内核及汇编
汇编·riscv
一条叫做nemo的鱼1 天前
从汇编的角度揭秘C++函数重载,原来这么简单
汇编·c++·函数重载·原理解密
清水白石0083 天前
WebSockets 在实时通信中的应用与优化
开发语言·汇编·python·websockets
南玖yy4 天前
如何创建和使用汇编语言,以及下载编译汇编软件(Notepad++,NASM的安装)
汇编·策略模式
南玖yy4 天前
x86 与 ARM 汇编深度对比:聚焦 x86 汇编的独特魅力
开发语言·汇编·arm开发·边缘计算
JCBP_4 天前
C++(4)
开发语言·汇编·c++
Funny-Boy7 天前
初识main函数
汇编·c++
0xCC说逆向7 天前
Windows逆向工程提升之IMAGE_IMPORT_DESCRIPTOR
c语言·汇编·windows·安全·逆向·pe结构
眸生8 天前
自制操作系统day7(获取按键编码、FIFO缓冲区、鼠标、键盘控制器(Keyboard Controller, KBC)、PS/2协议)
c语言·汇编·计算机外设·操作系统·计算机组成原理·寄存器