Assembler
__BMGT()
___
展开
-
nasm 汇编生成 windows 可执行文件
default rel section .text extern MessageBoxA handler: sub rsp,40 mov rcx,0 lea rdx,[text] lea r8,[caption] mov r9,1 ; MB_OKCANCEL call MessageBoxA sub ea.原创 2020-09-02 11:27:05 · 1867 阅读 · 0 评论 -
nasm汇编程序例程got
section .textextern _MessageBoxA@16%if __NASM_VERSION_ID__ >= 0x02030000 safeseh handler ; register handler as "safe handler"%endifhandler: push DWORD 1 ; MB_OKCANCEL push DWORD caption push D转载 2017-09-04 19:09:08 · 893 阅读 · 0 评论 -
linux asm(nasm) output strings
section .textglobal mainmain: mov eax,4 mov ebx,1 mov ecx,msg mov edx,len int 80h mov eax,1 int 80hmsg: db "hello world!it's too long!/n","$",'\r\n\t',0,'12345',lenlen equ $-msg nasm -f e转载 2017-09-04 22:32:20 · 482 阅读 · 0 评论 -
win32汇编无头文件编译成功
.386.model flat,stdcalloption casemap:noneincludelib user32.libincludelib gdi32.libincludelib kernel32.libNULL EQU 0MB_OK EQU 0MessageBoxA proto stdcall :dword,:dword,:dword,:dwordExitP原创 2017-09-14 00:37:12 · 412 阅读 · 0 评论 -
win32汇编的segment,子程序,宏定义,局部变量定义test1
.386.model flat,stdcalloption casemap:noneincludelib user32.libincludelib gdi32.libincludelib kernel32.libNULL EQU 0MB_OK EQU 0%echo mb_ok:MB_OKecho MB_OKMessageBoxA proto stdcall :dwor原创 2017-09-14 02:46:49 · 982 阅读 · 0 评论 -
在裸机上在bios中断向量表中,汇编设置增加中断服务程序(向量地址设置三种方式)
bits 16 cpu 8086 %macro PutChar 2 ;必须定义写在使用前面;否则后面编译报错 mov al,%1 mov ah,09h mov bx,000ch mov cx,%2 mov dh,02h mov dl,0h int 10h%endmacro org 07c00h mov ax,cs mov ds,ax mov es,ax原创 2017-09-16 02:01:10 · 803 阅读 · 0 评论 -
学习PC裸机汇编输出HelloWorld环境搭建和解决启动镜像问题
OS platform: Windows7Assembler : nasm,ndisasmVirtual Machine: VitualBox org 07c00h mov ax,cs mov ds,ax mov es,ax call DispStr jmp $DispStr: mov ax,BootMessage mov bp,ax mov cx,len mov ax原创 2017-09-09 17:14:43 · 975 阅读 · 0 评论 -
从pc裸机磁盘(第一个扇区以后的扇区)中载入程序数据并运行
;$$ - start position bits 16 cpu 8086 org 07c00h mov ax,cs mov ds,ax mov es,ax ;output bootMsg -- first msg mov ax,bootMsg ;input parameter msg mov cx,bootMsgLen ;str length mov dh,00h ;原创 2017-09-09 19:52:07 · 582 阅读 · 0 评论 -
汇编关机代码
;$$ - start position bits 16 cpu 8086 org 07c00h mov ax,cs mov ds,ax mov es,ax ;output bootMsg -- first msg mov ax,bootMsg ;input parameter msg mov cx,bootMsgLen ;str length mov dh,00h ;转载 2017-09-12 01:32:01 · 3507 阅读 · 0 评论 -
nasm调用C语言printf (windows)
extern _printf ; contains "_"section .text ; neededglobal _main_main:push dword [myint] ;myint is address,so [myint] is 1234.push dword mystringcall _printf;add esp,byte 8leave ;mov esp,ebp /原创 2017-12-09 03:54:38 · 1842 阅读 · 0 评论 -
nasm 宏定义
DEFAULT ABSDEFAULT relDEFAULT bnd _resb 100%define foo bar%define foo bz%define isTrue 1%define isFalse isTrue%define isTrue 0var db isFalse%define isTrue 1var2 db isFalse%define True 1%x原创 2017-12-26 21:15:17 · 997 阅读 · 0 评论 -
PC裸机利用内存地址B8000H~C0000H输出字符
org 07c00hjmp startmessageRVA equ $-$$message db "XIUYE"len equ $-messagedb $$db $start: mov ax,0xb800;图像显示的内存地址;B8000H~C0000H;段要/10 mov es,ax mov di,0 ;initialized value mov原创 2017-12-27 18:16:08 · 1200 阅读 · 0 评论 -
补码运算Overflow判断
只有一个高位进位或者符号位进位就为溢出PSW寄存器: OF,DF,SF,ZF,PF ,AF,CF ,IF ,TF标志位SF XOR CF = 1:OVERFLOW?转载 2017-12-27 20:34:55 · 1543 阅读 · 0 评论 -
LBA I/O 磁盘读写(未能成功实现,仅做记录) and 鼠标光标坐标通过I/O 控制(成功)
org 07c00hjmp startmessageRVA equ $-$$message db "Load the second sector!"messageLen equ $-messageloader_sector equ 0x2loader_base_segment equ 0x7ef ;0x7ef0 / 10hloader_base_RVA_in_segment e原创 2017-12-28 21:49:09 · 1186 阅读 · 0 评论 -
Linux assembly comiled successfully
.data msg:.string "hello,world!\n" len=.-msg.text.global _start_start: movl $len,%edx movl $msg,%ecx movl $1,%ebx movl $4,%eax int $0x80 movl $0,%ebx movl $1,%eax int $0x80as -o hello.o原创 2017-04-12 21:31:00 · 652 阅读 · 0 评论 -
求二次根式(汇编浮点数指令fsqrt实现)
#include#includeusing namespace std;int main(){ double x = 2; double r = 0; float y=0; int a = 0; __asm{ fld x//传入的一定要是浮点数,否则报错. fsqrt fst r fst y mov a,eax } cout<< x << endl; co原创 2017-02-28 13:44:25 · 2662 阅读 · 0 评论 -
Cpp inner asm block for add operating
#includeusing namespace std;int main(){ int x=0,y=11; __asm{ mov eax,y add eax,4 mov ebx,3 imul ebx mov x,eax } cout << (11+4)*3 << endl; cout << y << endl; cout << x << endl; r原创 2016-06-16 17:15:13 · 249 阅读 · 0 评论 -
win32汇编冒泡排序 且 编译通过
.386.model flat,stdcalloption casemap:noneinclude windows.incinclude user32.incincludelib user32.libinclude kernel32.incincludelib kernel32.lib.dataArrayA dword 3,1,7,5,2szCaption db 'Messag转载 2016-11-30 12:19:29 · 969 阅读 · 2 评论 -
cpu cmpxchg 指令理解 (CAS)
cmpxchg是汇编指令作用:比较并交换操作数.如:CMPXCHG r/m,r 将累加器AL/AX/EAX/RAX中的值与首操作数(目的操作数)比较,如果相等,第2操作数(源操作数)的值装载到首操作数,zf置1。如果不等, 首操作数的值装载到AL/AX/EAX/RAX并将zf清0该指令只能用于486及其后继机型。第2操作数(源操作数)只能用8位、16位或32位寄存器。第1操作数(目地操作数)原创 2016-11-30 12:46:10 · 27910 阅读 · 2 评论 -
GCC 内嵌汇编输出
#includeusing namespace std;int main(){ #ifdef __asm cout << "defined !" << endl; cout << __asm << endl; #endif #ifdef __asm__ cout << "defined !" << endl; cout << __asm__ << endl; #endif原创 2016-11-30 17:41:36 · 615 阅读 · 0 评论 -
汇编编译成功且运行
.386.model flat,stdcalloption casemap:noneinclude windows.incinclude user32.incincludelib user32.libinclude kernel32.incincludelib kernel32.lib.dataarrayA dword 1,2,3,4,5szCaption db '消息框!',转载 2016-11-24 09:52:07 · 419 阅读 · 0 评论 -
AT&T内嵌汇编
#includeusing namespace std;int main(){ int a = 3; int b = 5; int c = 0; __asm__ __volatile__("mov %1,%0":"=r"(c):"r"(b));//%0 --> c ; %1 --> b cout << "a := " << a << endl; cout << "b := " <原创 2017-01-03 16:34:13 · 429 阅读 · 0 评论 -
汇编(指令cpuid)获取cpu信息
#includeusing namespace std;int main(){ unsigned int meax; unsigned int mebx; unsigned int mecx; unsigned int medx; __asm{ xor eax,eax cpuid mov meax,eax mov mebx,ebx mov mecx,ecx原创 2017-01-03 17:37:35 · 5012 阅读 · 3 评论 -
内嵌汇编 jmp
#includeusing namespace std;int main(){ R: cout << "see you" << endl; //goto R; __asm{ mov eax,R jmp eax } return 0;}see yousee yousee yousee yousee yousee yousee yousee yo原创 2017-01-04 11:35:24 · 1224 阅读 · 0 评论 -
win32汇编 直接编译
.386.model flat,stdcall.stack 4096ExitProcess proto,dwExitCode:dwordDumpRegs proto.codemain proc mov eax,1000h mov eax,4000h mov eax,2000h ;call DumpRegs invoke ExitProcess,0main endpend原创 2016-12-20 12:43:28 · 532 阅读 · 0 评论 -
用汇编得到变量地址
#includeusing namespace std;int main(){ int a = 0; cout << "a := " << a << endl; __asm{ xor eax,eax lea eax,a mov a,eax } cout << "a := " << a << endl; cout << "a address := " << int(&a原创 2016-12-20 14:21:05 · 4935 阅读 · 0 评论 -
函数参数与堆栈有关,与寄存器无关
#includeusing namespace std;void f(int a,int b){ cout << "c++ inline asm " << endl; cout << "a := " << a << ", b := " << b << endl;}int main(){ int a = 0; __asm{ pop a; push 888; p原创 2017-01-15 11:44:09 · 629 阅读 · 0 评论 -
栈,ebp和esp寄存器的简单探索
#includeusing namespace std;void ff(){ cout << "f executing "<< endl; int a =0,b = 0,c = 0,d = 0,e =0; /* * cpu 的读值顺序,是从低地址到高地址,不是big-endian或者 * little-endian的方式哈,是一小段低地址读取"完"后,又从高地址读 * 取原创 2017-01-15 16:03:22 · 655 阅读 · 0 评论 -
获取当前指令执行地址
void CurrentIpAddress(int *b){ int a = 0; __asm{ mov eax,[ebp+4]; mov a,eax; } *b = a; }int a = 0; CurrentIpAddress(&a); block: cout << "EIP := " << a << endl; cout << "我已经执行过了!" <<原创 2017-01-15 17:55:32 · 1563 阅读 · 0 评论 -
windows assembler helloworld
.386 .model flat,stdcall option casemap:none include windows.inc include user32.inc includelib user32.lib include kernel32.inc includelib kernel32.li原创 2016-05-14 21:06:42 · 282 阅读 · 0 评论