x86汇编教程([简明x86汇编语言教程] 汇编语言小游戏x86)
![x86汇编教程([简明x86汇编语言教程] 汇编语言小游戏x86)](/static/images/content_image/hands-1838658_1920.jpg)
本文目录
- [简明x86汇编语言教程] 汇编语言小游戏x86
- 怎么学习ollydbg原理是什么基本使用方法是什么
- x86汇编从实模式到保护模式视频教程
- 我想学习计算机是应该学习编程,还是了解windows,还是一些专业软件,如ps等,还是网页设计,还是什么的
- 安卓运行exe方法
- 汇编里的JAE和JGE有什么区别
[简明x86汇编语言教程] 汇编语言小游戏x86
简明x86汇编语言教程(2)
第二章 认识处理器
中央处理器(CPU)在微机系统处于“领导核心”的地位。汇编语言被编译成机器语言之后,将由处理器来执行。那么,首先让我们来了解一下处理器的主要作用,这将帮助你更好地驾驭它。
典型的处理器的主要任务包括
从内存中获取机器语言指令,译码,执行
根据指令代码管理它自己的寄存器
根据指令或自己的的需要修改内存的内容
响应其他硬件的中断请求
一般说来,处理器拥有对整个系统的所有总线的控制权。对于Intel平台而言,处理器拥有对数据、内存和控制总线的控制权,根据指令控制整个计算机的运行。在以后的章节中,我们还将讨论系统中同时存在多个处理器的情况。
处理器中有一些寄存器,这些寄存器可以保存特定长度的数据。某些寄存器中保存的数据对于系统的运行有特殊的意义。
新的处理器往往拥有更多、具有更大字长的寄存器,提供更灵活的取指、寻址方式。
寄存器
如前所述,处理器中有一些可以保存数据的地方被称作寄存器。
寄存器可以被装入数据,你也可以在不同的寄存器之间移动这些数据,或者做类似的事情。基本上,像四则运算、位运算等这些计算操作,都主要是针对寄存器进行的。
首先让我来介绍一下80386上最常用的4个通用寄存器。先瞧瞧下面的图形,试着理解一下:
上图中,数字表示的是位。我们可以看出,EAX是一个32-bit寄存器。同时,它的低16-bit又可以通过AX这个名字来访问;AX又被分为高、低8bit两部分,分别由AH和AL来表示。
对于EAX、AX、AH、AL的改变同时也会影响与被修改的那些寄存器的值。从而事实上只存在一个32-bit的寄存器EAX,而它可以通过4种不同的途径访问。
也许通过名字能够更容易地理解这些寄存器之间的关系。EAX中的E的意思是“扩展的”,整个EAX的意思是扩展的AX。X的意思Intel没有明示,我个人认为表示它是一个可变的量。而AH、AL中的H和L分别代表高和低 。
为什么要这么做呢?主要由于历史原因。早期的计算机是8位的,8086是第一个16位处理器,其通用寄存器的名字是AX,BX等等;80386是Intel推出的第一款IA-32系列处理器,所有的寄存器都被扩充为32位。为了能够兼容以前的16位应用程序,80386不能将这些寄存器依旧命名为AX、BX,并且简单地将他们扩充为32位——这将增加处理器在处理指令方面的成本。
Intel微处理器的寄存器列表(在本章先只介绍80386的寄存器,MMX寄存器以及其他新一代处理器的新寄存器将在以后的章节介绍)
通用寄存器
下面介绍通用寄存器及其习惯用法。顾名思义,通用寄存器是那些你可以根据自己的意愿使用的寄存器,修改他们的值通常不会对计算机的运行造成很大的影响。通用寄存器最多的用途是计算。
EAX
32-bit宽
通用寄存器。相对其他寄存器,在进行运算方面比较常用。在保护模式中,也可以作为内存偏移指针(此时,DS作为段寄存器或选择器)
EBX
32-bit宽
通用寄存器。通常作为内存偏移指针使用(相对于EAX、ECX、EDX),DS是默认的段寄存器或选择器。在保护模式中,同样可以起这个作用。
ECX
32-bit宽
通用寄存器。通常用于特定指令的计数。在保护模式中,也可以作为内存偏移指针(此时,DS作为寄存器或段选择器)。
EDX
32-bit宽
通用寄存器。在某些运算中作为EAX的溢出寄存器(例如乘、除)。在保护模式中,也可以作为内存偏移指针(此时,DS作为段寄存器或选择器)。
上述寄存器同EAX一样包括对应的16-bit和8-bit分组。
用作内存指针的特殊寄存器
ESI
32-bit宽
通常在内存操作指令中作为“源地址指针”使用。当然,ESI可以被装入任意的数值,但通常没有人把它当作通用寄存器来用。DS是默认段寄存器或选择器。
EDI
32-bit宽
通常在内存操作指令中作为“目的地址指针”使用。当然,EDI也可以被装入任意的数值,但通常没有人把它当作通用寄存器来用。DS是默认段寄存器或选择器。
EBP
32-bit宽
这也是一个作为指针的寄存器。通常,它被高级语言编译器用以建造‘堆栈帧’来保存函数或过程的局部变量,不过,还是那句话,你可以在其中保存你希望的任何数据。SS是它的默认段寄存器或选择器。
注意,这三个寄存器没有对应的8-bit分组。换言之,你可以通过SI、DI、BP作为别名访问他们的低16位,却没有办法直接访问他们的低8位。
段寄存器和选择器
实模式下的段寄存器到保护模式下摇身一变就成了选择器。不同的是,实模式下的“段寄存器”是16-bit的,而保护模式下的选择器是32-bit的。
CS 代码段,或代码选择器。同IP寄存器(稍后介绍)一同指向当前正在执行的那个地址。处理器执行时从这个寄存器指向的段(实模式)或内存(保护模式)中获取指令。除了跳转或其他分支指令之外,你无法修改这个寄存器的内容。
DS 数据段,或数据选择器。这个寄存器的低16 bit连同ESI一同指向的指令将要处理的内存。同时,所有的内存操作指令默认情况下都用它指定操作段(实模式)或内存(作为选择器,在保护模式。这个寄存器可以被装入任意数值,然而在这么做的时候需要小心一些。方法是,首先把数据送给AX,然后再把它从AX传送给DS(当然,也可以通过堆栈来做).
ES 附加段,或附加选择器。这个寄存器的低16 bit连同EDI一同指向的指令将要处理的内存。同样的,这个寄存器可以被装入任意数值,方法和DS类似。
FS F段或F选择器(推测F可能是Free?)。可以用这个寄存器作为默认段寄存器或选择器的一个替代品。它可以被装入任何数值,方法和DS类似。
GS G段或G选择器(G的意义和F一样,没有在Intel的文档中解释)。它和FS几乎完全一样。
SS 堆栈段或堆栈选择器。这个寄存器的低16bit连同ESP一同指向下一次堆栈操作(push和pop)所要使用的堆栈地址。这个寄存器也可以被装入任意数值,你可以通过入栈和出栈操作来给他赋值,不过由于堆栈对于很多操作有很重要的意义,因此,不正确的修改有可能造成对堆栈的破坏。
* 注意一定不要在初学汇编的阶段把这些寄存器弄混。他们非常重要,而一旦你掌握了他们,你就可以对他们做任意的操作了。段寄存器,或选择器,在没有指定的情况下都是使用默认的那个。这句话在现在看来可能有点稀里糊涂,不过你很快就会在后面知道如何去做。
特殊寄存器(指向到特定段或内存的偏移量):
EIP 这个寄存器非常的重要。这是一个32位宽的寄存器 ,同CS一同指向即将执行的那条指令的地址。不能够直接修改这个寄存器的值,修改它的唯一方法是跳转或分支指令。(CS是默认的段或选择器)
ESP 这个32位寄存器指向堆栈中即将被操作的那个地址。尽管可以修改它的值,然而并不提倡这样做,因为如果你不是非常明白自己在做什么,那么你可能造成堆栈的破坏。对于绝大多数情况而言,这对程序是致命的。(SS是默认的段或选择器)
IP: Instruction Pointer, 指令指针
SP: Stack Pointer, 堆栈指针
好了,上面是最基本的寄存器。下面是一些其他的寄存器,你甚至可能没有听说过它们。(都是32位宽):
CR0, CR2, CR3(控制寄存器)。举一个例子,CR0的作用是切换实模式和保护模式。
还有其他一些寄存器,D0, D1, D2, D3, D6和D7(调试寄存器)。他们可以作为调试器的硬件支持来设置条件断点。
TR3, TR4, TR5, TR6 和 TR? 寄存器(测试寄存器)用于某些条件测试。
最后我们要说的是一个在程序设计中起着非常关键的作用的寄存器:标志寄存器。
怎么学习ollydbg原理是什么基本使用方法是什么
最简单的方法是启动OllyDbg,点击File|Open,然后选择你想调试的程序。程序需要命令行参数输入对话框下方的文本栏。
重新开始调试最后一个程序的快捷键是Ctrl+F2,并且OllyDbg使用相同的参数。
你也可以点选历史记录。把程序拖入OllyDbg也可以开始调试。
当然,当启动OllyDbg时,你在命令行中也能指定被调试的程序名和参数。比如:
你可以创建桌面快捷方式指向OllyDbg,选择属性,到快捷方式,把程序名加入目
标栏。每次你双击这个快捷图标,OllyDbg自动装载被调试程序。
你可以attach OllyDbg到某个正在运行的进程。点击File|Attach,从列表中选择
该进程。注意:当你关闭OllyDbg,这个进程也会终止。不要试图attach系统进程
,这很可能使系统完全死机。(事实上,大多数情况下,OS不允许attach敏感进
程)
OllyDbg能作为just-in-time debugger。这需要在注册表中登记。点击
Options|Just-in-time debugging,在对话框中按“Make OllyDbg just-in-time
debugger”。现在,当一些程序崩溃,你会被询问是否调试它。这样,操作系统
可以启动OllyDbg并直接停在异常发生处。如果你选择attaching without
confirmation,OllyDbg不会询问直接启动。要恢复原来的just-in-time
debugger,在出现的对话框中按相应的按纽就行了。
其它方法还有,把OllyDbg加入可执行文件的弹出式菜单。点击Options|Add to
Explorer,按“Add OllyDbg to menu in Windows Explorer”。以后你可以右击
可执行文件点选OllyDbg。这个选项创建注册表键
HKEY_CLASSES_ROOT/exefile/shell/Open with OllyDbg and
HKEY_CLASSES_ROOT/exefile/shell/Open with OllyDbg/command
OllyDbg可以调试控制台(基于文本)程序。
注意:WindowsNT或Windows2000下,你必须有管理员权限
OllyDbg的help-通用快捷键(翻译)
Golbal shortcuts(通用快捷键)
这些快捷键在OllyDbg中通用,不依赖于当前活动窗口。
Ctrl+F2---OllyDbg重置,重新开始调试。如果没有活动程序,OllyDbg装入历史列表中的第一个程序。OllyDbg重置会释放内存移除硬断点。
Alt+F2--关闭被调试的程序。如果程序还在活动状态,你会被询问是否执行该操作。
F3--显示“Open 32-bit .exe file”对话框,这里可以选择可执行文件和指定参数
Alt+F5--使OllyDbg显示在屏幕最前方。如果被调试程序中断时显示窗口遮住OllyDbg的一些区域,不继续运行又不能移动或最小化它。激活OllyDbg按Alt+F5可以解决。如果你再次按Alt+F5,OllyDbg会恢复为普通窗口。OllyDbg的当前状态显示在状态栏。
F7--step into,执行下一条简单命令。如果该命令是一个函数调用,进入调用函数内部。如果命令有REP前缀,执行该命令的一步操作。
Shift+F7--与F7相同,除了当被调试程序遇到某些异常时,首先尝试调用程序自己的异常处理过程。
Ctrl+F7--animate into,一步一步执行程序,也进入函数调用(就象你一直按着F7,不过更快)。当你执行一些单步或继续命令,程序到达有效断点,一些异常发生时,Animation终止。每步执行,OllyDbg重画所有窗口。要加速animation,关闭所有窗口而不要只改变现有窗口的大小。终止animation,也可按Esc。
F8-step over,执行下一条简单命令。如果该命令是一个函数调用,立刻执行完该函数(除非函数内部有断点或产生异常)如果命令有REP前缀,执行所有重复操作,并停于下一条命令。
Shift+F8--与F8相同,除了当被调试程序遇到某些异常时,首先尝试调用程序自己的异常处理过程。
Ctrl+F8--animate over,一步一步执行程序,但不进入函数调用(就象你一直按着F8,不过更快)。当你执行一些单步或继续命令,程序Animation到达有效断点或异常发生时,Animation终止。每步执行,OllyDbg重画所有窗口。要加速animation,关闭所有窗口而不要只改变现有窗口的大小。终止animation也可按Esc。
F9--继续执行程序。
Shift+F9--与F9相同。除了当被调试程序遇到某些异常时,首先尝试调用程序自己的异常处理过程。
Ctrl+F11--run trace into,一步一步执行程序,要进入函数调用,记录寄存器内容。Run trace 不重绘CPU窗口.
F12-悬挂所有线程以停止程序执行。最好用继续键和菜单命令(像F9)恢复执行线程,而不要用其它手动方法恢复。
Ctrl+F12--run trace over,一步一步执行程序,不进入函数调用,记录寄存器内容。Run trace不重绘CPU窗口。
ESC--如果animation或跟踪正在进行,将被终止。如果CPU窗口显示跟踪时的数据,此时转为显示实际数据。
Alt+B--打开或恢复Breakpoint窗口。这里可以,删除和观察断点。
Alt+C--打开或恢复CPU窗口。
Alt+E--打开或恢复模块列表
Alt+E--打开或恢复Call stack窗口。
Alt+L--打开或恢复Log窗口。
Alt+M--打开或恢复Memory窗口。
Alt+O--打开Option对话框
Ctrl+P--打开Patch窗口。
Ctrl+T--打开Pause run trace对话框
Alt+X-中断OllyDbg。
多数窗口可以使用下列快捷键:
Alt+F3--关闭活动窗口。
Ctrl+F4--关闭活动窗口。
F5--最大化或恢复活动窗口。
F6--激活下一个窗口。
Shift+F6--激活前一个窗口。
F10--打开激活窗口或面板的右键菜单。
LeftArrow--左移一个字符。
Ctrl+LeftArrow--左移一行。
RightArrow--右移一个字符。
Ctrl+RightArrow--右移一行。
OllyDbg的help-分析模块介绍(翻译)
分析
OllyDbg集成了快速超强的代码分析器。装载它,可以用弹出式菜单或者CPU窗口
的反汇编栏按Ctrl+A或者在执行模块选“Analyze all modules”。
分析器非常有用。它在数据中分辨代码,标记入口点和jump的目标,辨认switch
tables,ASCII和UNICODE字符串,定位过程、循环、高级switch语句和解码标准
API函数参数(看范例)。OllyDbg的其它部分也广泛用于数据分析。
这怎么可能呢?我稍微介绍一下原理。首先,OllyDbg反汇编代码区所有可能的地
址,记下所有发现的调用及指向的目标。当然,许多这样的调用不正确,但是未
必会有两个错误的调用指向同一条命令,并且三个或三个以上更不可能。这样,
三个或更多调用指向同一地址,我就确信该地址是经常使用的子过程入口。从这
个入口开始,我跟踪所有的跳转和调用,反复操作。这种方法使我99.9%确定所
有命令。然而,某些字节不在这条链中,我采用大约20个更高效的方法(最简单
的如:“MOV ,Ra"是无效命令).
过程检测也简单。过程,从分析器的角度看,就是从入口开始的代码的连续区域
,(理论上)可以到达其它命令(除NOP或对齐填充外)。你可以指定三种识别级
。Strict级严格确认一个入口和至少一个出口。heuristical级,分析器尝试确认
入口。如果你选择fuzzy级,或多或少相容的代码区被分离为过程。现代编译器把
过程分成几个部分作公用代码优化。这种情况下,fuzzy级特别有用!然而,误解
的概率也相当高。
类似的,loop是一个封闭的连续命令序列,这里最后的命令跳到开头、一个入口
几个出口。Loop相当于高级操作语言中的do,while和for。OllyDbg能认识任何复
杂的嵌套循环。在反汇编区,他们用长长的大括号标记。如果入口不是循环的第
一条命令,OllyDbg用个小三角形作标记。
实现switch语句,多数编译器把switch变量装入寄存器,然后减去一部分,像下
面代码序列一样:
MOV EDX,《switch variable》
SUB EDX,100
JB DEFAULTCASE
JE CASE100 ; Case 100
DEC EDX
JNE DEFAULTCASE
... ; Case 101
这些序列也可能包含一级或两级switch表,直接比较,优化,填充等等。如果你
深入研究比较和跳转树,很难说哪一条命令是某个case语句。OllyDbg为你代劳。
它标记所有的case语句,包括default,甚至尝试猜测case的意思,如’A’,
WM_PAINT 或者 EXCEPTION_ACCESS_VIOLATION。如果命令序列不修改寄存器(只
由比较命令构成),那么不大可能是switch语句,但可能是if嵌套:
if (i==0) {...}
else if (i==5) {...}
else if (i==10) {...}
让OllyDbg解码if嵌套为switch,选择Analysis1中相应的选项。
OllyDbg预置超过1900个常用API函数的描述。包括KERNEL32, GDI32, USER32,
ADVAPI32, COMDLG32, SHELL32, VERSION, SHLWAPI, COMCTL32, WINSOCK,
WS2_32 和 MSVCRT。你也可以加入自己的描述。如果分析器遇到已知函数名的调
用(或跳转到该函数),它尝试解码调用跟前的PUSH命令。因此,你可以粗略翻
译该调用的功能。OllyDbg也内置大约400个标准C函数的描述。如果你利用新库,
我建议你分析前先扫描对象文件。这种情况下,OllyDbg也会解码已知的C函数参
数。
如果选项“Guess number of arguments of unknown functions”被设置,分析
器尝试确认调用过程进栈的双字数目,并标记他们为参数Arg1,Arg2等等。注意:
如果有寄存器参数,OllyDbg还是不认识也不包括在上面的统计中。分析器采用了
一个安全的方法。例如,它不分辨无参数过程和返回前用POP恢复寄存器代替舍弃
参数的case语句。然而,能分辨出的函数数目相当多,并非常有助于提高代码的
可读性。
分析器能跟踪寄存器的值。现代优化编译器,特别是面向Pentium的,经常把常量
和地址装入寄存器便于重复使用或减小内存占用空间。如果一些常量装入寄存器
,分析器会注意它,并用于解码函数及其参数。还能执行简单的算术计算跟踪
push和pop命令。
分析器不能区别不同类型的名字。如果你用已有的名字命名一些函数,OllyDbg会
解码所有该地址的调用为原过程。WinMain,DllEntryPoint和WinProc是特殊的预
定义名。你可以使用这些标号标记主程序入口,DLL入口指针和window过程(注意
:OllyDbg不会检查用户定义标号的唯一性)。当然,最好的方法是显示已定义的
参数。
非常不幸,没有一般的规则用于100%的准确分析。有些情况下,例如当模块包含
p-代码或者代码区嵌入大量数据,分析器可能认为部分数据是代码。如果统计分
析显示代码可能被打包或加密,分析器会警告你。如果你想用hit跟踪方式,我建
议你不要用fuzzy分析方式,否则断点被设置在被误认为代码的数据上的几率很高。
自解压文件通常在主体代码外有解压代码。如果你选择SFX选项“Extend code
section to include self-extractor”,OllyDbg会扩大代码区,形式上允许分
析它并跟踪。
OllDbg的一般原理(翻译)部分
我希望你熟悉80x86兼容CPU的内部结构,并且有汇编写程序的经历。我也希望你
熟悉Microsoft Windows.
OllyDbg是一个单进程多线程的“机器代码级”debugger,用于Windows环境下的32位程序。它允许你debug和patch PE格式的可执行程序。OllDbg仅仅使用列入文档的Win32 API调用,所以可用于下一代32位Windows系统。OllDbg看来也可工作于Windows XP,但是我没有详尽的测试,因此不能保证功能完整。
OllyDbg不是面向编译器。它不含特别的规则显示某些情况下特定的编译程序生成哪些代码序列。因此,你可以一样对待任何编译器编译的,或者汇编书写的任何代码。
OllyDbg与被调试的程序同时工作。你可以浏览代码和数据、设置断点、停止或继续线程,甚至运行期修改内存(有时这叫作软调试方式)。当然,如果被请求的操作不是最基本的,OllyDbg就会短时暂停程序,但这对用户透明。有时不在调试状态运行的程序会意外崩溃。OllyDbg,这个“及时”debugger,会指出异常发生的位置。
OllyDbg强烈面向模块。模块这里指启动时加载的或动态加载的主执行文件或动态连接库。在调试区,你可以设置断点,定义新标号和注释汇编语句。当一些模块从内存卸载后,OllyDbg保存这些信息到扩展名为.UDD名字同被调试模块的文件中。下次当装载这些模块时,OllyDbg自动复原所有调试信息,不论程序是否使用这些模块。比如:你调试使用Mydll的程序Myprog1,并且在Mydll中设置一些断点。那么当你调试Myprog2时,也使用Mydll,你会发现所有在Mydll中的断点还在那里,不管Mydll是否装载在不同的位置。
一些调试器把被调试进程的内存视为单个2**32字节区域。OllyDbg做了别的处理方法。内存由几个独立的块组成。任何内存操作都限制于块内。在大多数案例中,这工作优良并且容易调试。但是模块包含几个执行部分等等,你将不能立刻看到整个代码。然而这些例外不常见。
OllyDbg是内存消耗大户。启动时就要分配3MB内存,甚至更多。每次分析,备份,跟踪或文件转储另外再分配。所以当你调试大工程时消耗40或60M内存很正常。
要有效的调试一些无源代码的程序,你首先必须理解它是如何工作的。OllyDbg提供了大量的手段使理解更容易
x86汇编从实模式到保护模式视频教程
实模式也就是8086汇编,限制在 1M 的内存范围内编程。
保护模式则进行了扩展,可以在 16M 的内存范围内编程,相对就复杂些。
----但不管是实模式,还是保护模式,都是已过时的技术。
----后来的技术有386增强模式以及AMD64技术,支持的内存更大,能力更强。
我想学习计算机是应该学习编程,还是了解windows,还是一些专业软件,如ps等,还是网页设计,还是什么的
如果是年轻学生,希望将来工作时能够有计算机应用能力,主要是熟悉windows系列操作系统的使用和office系列办公软件尤其是excel的使用,毕竟word一般比较好应用,企业中excel水平代表能力,而且很多时候确实能比别人快的完成任务。
要是你专注于做论文什么的,还是要熟悉word尤其是排版部分。
如果你有兴趣做平面设计可以从ps开始学起,学好了能够给家里弄个全家福、给女朋友照片美化,如果不是专门下功夫,很难达到影楼效果,只能是自己玩玩
如果有兴趣干程序员,才需要学习编程,毕竟平时很少能用到编程。不过学好了,对于锻炼逻辑思维是有很大好处的,尤其是能够当上项目经理,对于团队管理、工作安排等等会有很多经验能够积累,对一生都有好处。
网页设计简单了解没有坏处,不过还是那句话,不想干IT就没必要深入学习,毕竟想自己建个网站现在很难,个人申请域名已经开始限制了,如果想弄个空间,织个微博之类的,简单操作几下就行了。
希望能够帮助你
安卓运行exe方法
实现在安卓系统上完美运行EXE格式文件办法
需要东西:
1网上下载Bochs模拟器主程序(就是一个apk程序文件)
2配置文件
3系统镜像
操作步骤
步骤1:安装模拟器主程序(这个就不用多说了,和普通安卓应用一样)
步骤2:将装有配置文件的SDL文件夹拷贝到机身内存根目录中(没有机身内存的手机请拷贝到SD卡中,不清楚拷贝到哪里的就用RE管理器拷贝到手机根目录显示sdcard的文件夹里)
步骤3:将系统镜像文件改名为c.img,拷贝到步骤2中的SDL文件夹(要用什么系统就拷贝相应的镜像)
步骤4:运行安装好的模拟器主程序,没有问题的话就会开机运行操作系统了
教程只是个初级傻瓜教程,要想实现模拟系统实现更多的功能(优化虚拟机性能、增加磁盘等)请翻阅XDA的帖子。传送
门: h t t p: // forum.xda-developers.com/showthread.php?t=1459153
想要自己制作磁盘镜像来安装自己所需操作系统的请参阅这个帖子(希望能有人试试win7之类的系
统): h t t p: // forum.xda-developers.com/showthread.php?t=1465365
最后放出用的工具和镜像
模拟器主程序+配置文件(配置文件已装在SDL文件夹,直接将SDL文件夹拷贝到内存根目录就行):115.com/file/c2bqgy19#
win98磁盘镜像:115.com/file/dpy6g3eq#
winxp磁盘镜像:115.com/file/c2bqgit0#
bochs的主页有一些linux和UNIX类的系统磁盘镜像,有需要的可以翻翻:h t t p://bochs.sourceforge.net/diskimages.html
汇编里的JAE和JGE有什么区别
JAE和JGE都是两数比较,前者大于等于后者则跳转,好像是一个是有符号一个是无符号。
![x86汇编教程([简明x86汇编语言教程] 汇编语言小游戏x86)](/static/images/content_image/lilacs-1914124_1920.jpg)
更多文章:
form表单制作(为什么制作的form表单会在网页显示中多出一行)
2026年10月11日 09:10
teammate(teammate,company,partner)
2026年10月11日 06:10
javascript arraybuffer(javascript可以把base64编码转换成二进制代码吗求示例代码!)
2026年10月11日 04:00
text函数公式(excel中round和text函数的区别是什么)
2026年10月11日 03:50
google chrome打不开(chrome浏览器打不开怎么回事 浏览器打不开的处理方法)
2026年10月11日 02:00
websocket整合springboot(Springboot整合Websocket遇到的坑)
2026年10月11日 01:40
drawerlayout(android 怎样让drawerlayout设置的侧滑菜单的内容充满屏幕)
2026年10月10日 19:20
xor四位数怎么运算(单片机怎样用C语言实现4个数字间的异或)
2026年10月10日 17:50



