自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Silent_Hunter的博客

记录编程学习过程中的知识点

  • 博客(55)
  • 收藏
  • 关注

原创 x86汇编_压缩BCD码_DAA指令_DAS指令_笔记57

压缩十进制数的每个字节存放两个十进制数字,每个数字用 4 位表示。十进制数 2345673928737285十进制数 12345678十进制数 8723654十进制数 9345十进制数 237十进制数 34虽然声明的是16进制数,但是在压缩BCD码的的标准下,16进制的0~9与10进制的0~9刚好是相同的。压缩十进制存储至少有两个优势:1) 数据几乎可以包含任何个数的有效数字。这使得以很高的精度执行计算成为可能。2) 实现压缩十进制数与 ASCII 码之间的相互转换相对简单。

2022-11-14 00:18:41 2324 1

原创 x86汇编_ASCII和非压缩BCD码运算_AAA / AAS_笔记56

虽然 CPU 用二进制运算,但是也可以执行 ASCII 十进制串的运算。使用后者进行运算,对用户而言既便于输入也便于在控制台窗口显示,因为不用进行二进制转换。

2022-10-28 00:32:21 1363

原创 x86汇编_BCD码_笔记55

BCD码(Binary-Coded Decimal‎),用4位二进制数来表示1位十进制数中的0~9这10个数码,是一种二进制的数字编码形式,用二进制编码的十进制代码。

2022-10-06 00:24:32 698

原创 x86汇编_扩展加减法_笔记54

扩展加减法是指对没有大小限制的数进行加减法的技术。

2022-10-03 15:36:27 653

原创 x86汇编_DIV / IDIV除法指令_笔记53

x86汇编_DIV / IDIV除法指令

2022-09-24 01:28:53 4831 2

原创 x86汇编_MUL/IMUL乘法指令_笔记52

32位模式下整数乘法可以实现32、16或8位的操作,64位下还可以使用64位操作数。MUL执行无符号乘法,IMUL执行有符号乘法。

2022-08-31 14:53:14 13130 1

原创 x86汇编_SHLD/SHRD双精度左右移指令_笔记49

SHLD(双精度左移)指令将目的操作数向左移动指定位数。移动形成的空位由源操作数的高位填充。SHRD(双精度右移)指令将目的操作数向右移动指定位数。移动形成的空位由源操作数的低位填充。源操作数不变,但是符号标志位、零标志位、辅助进位标志位、奇偶标志位和进位标志位会受影响。.........

2022-07-24 16:55:30 1834

原创 x86汇编_循环左/右移_带进位的循环左/右移_笔记48

x86汇编_循环左/右移_带进位的循环左/右移_笔记48

2022-06-18 00:46:39 10400

原创 x86汇编_逻辑左/右移_算术左/右移_笔记47

逻辑左/右移_算术左/右移

2022-06-13 01:21:15 1901

原创 x86汇编_移位和循环移位指令简介_笔记46

​移位指令与前面介绍的按位操作指令一起形成了汇编语言最显著的特点之一。位移动 (bit shifting) 意味着在操作数内向左或向右移动。x86 处理器在这方面提供了相当丰富的指令集如下表所示,这些指令都会影响溢出标志位和进位标志位。...

2022-06-12 15:08:47 1536

原创 x86汇编_MASM的IF伪指令_笔记44

在使用MASM条件伪指令之前,一定要彻底了解怎样用纯汇编语言的指令实现条件分支。此外,在包含条件伪指令的程序汇编中,要查看列表文件以确认 MASM 生成的代码确实是编程者所需要的。

2022-05-19 01:28:45 1714

原创 x86汇编_条件控制伪指令简介_笔记43

32 位模式下,MASM 包含了一些高级条件控制流伪指令(conditional control flow directives),这有助于简化编写条件语句,书写方式与高级语言完全一样,非常舒服方便。遗憾的是,这些伪指令不能用于 64 位模式。

2022-05-17 00:45:50 339

原创 x86汇编_Irvine32链接库的子过程isdigit源代码讲解_笔记42

Irvine32链接库的isdigit源代码

2022-05-16 23:55:27 184

原创 x86汇编_表驱动选择_笔记_41

表驱动选择是用查表来代替多路选择结构的一种方法。使用这种方法,需要新建一个表,表中包含查询值和标号或过程的偏移量,然后必须用循环来检索这个表。当有大量比较操作时,这个方法最有效。表驱动选择有一些初始化开销,但是它能减少编写的代码总量。一个表就可以处理大量的比较,并且与一长串的比较、跳转和 CALL 指令序列相比,它更加容易修改。甚至在运行时,表还可以重新配置。; 过程偏移量表 (ProcTble.asm); 本程序包含了过程偏移量表格; 使用这个表执行间接过程调用INCLUDE

2022-05-13 14:34:34 152

原创 x86汇编_WHILE循环_笔记_40

高级语言的while循环如下:while( val1 < val2 ){ val1++; val2 --;}用汇编语言实现这个结构时,可以很方便地改变循环条件,当条件为真时,跳转到 endwhile。.dataval1 word 2val2 word 9 .codemain proc nop begin_while: mov ax, val1 cmp ax, val2 jnl end_while inc word ptr val1 dec w

2022-05-10 00:13:43 766

原创 x86汇编_短路求值-AND / OR运算符_笔记_39

AND / OR运算符短路求值在汇编中的体现。

2022-05-07 14:43:13 498

原创 x86汇编_LOOPZ / LOOPE,LOOPNZ / LOOPNE_笔记_38

x86汇编_LOOPZ / LOOPE,LOOPNZ / LOOPNE

2022-05-07 10:21:57 3928

原创 x86汇编_高级语言的IF语句_笔记_37

高级语言的if条件格式在汇编中,则是用多个步骤来实现这种结构的。首先,对布尔表达式求值,这样一来某个 CPU 状态标志位会受到影响。然后,根据相关 CPU 状态标志位的值,构建一系列跳转把控制传递给两个语句列表。

2022-05-05 14:46:52 1763

原创 x86汇编_条件跳转示例_笔记_36

条件跳转示例

2022-05-04 15:27:43 1186

原创 x86汇编_无符号与有符号跳转_笔记_35

Greater / Less用于描述有符号的比较,Above / Below用于表示无符号的比较,Equal则通用。

2022-04-30 15:10:46 1005

原创 x86汇编_JE、JNE、JCXZ 和 JECXZ 指令_笔记_34

下述示例使用了 JE、JNE、JCXZ 和 JECXZ 指令。仔细阅读注释,以保证理解为什么条件跳转得以实现(或不实现)。

2022-04-30 11:11:39 19332

原创 x86汇编_CPU跳转指令汇总_笔记_33

标志位值的跳转 助记符 英文翻译 说明 标志位/寄存器 JZ Jump if Zero 为零跳转 ZF=1 JNZ Jump if Not Zero 非零跳转 ZF=0 JC Jump if Carry 进位跳转 CF=1 JNC Jump if Not Carry 无进位跳转 CF=0 JO Jump if Overflow 溢出跳转 OF=1 JNO Jump if

2022-04-29 16:53:42 1320

原创 x86汇编_条件跳转简介_笔记_32

x86 指令集中没有明确的高级逻辑结构,但是可以通过比较和跳转的组合来实现它们。执行一个条件语句需要两个步骤 第一步,用 CMP、AND 或 SUB 操作来修改 CPU 状态标志位;第二步,用条件跳转指令来测试标志位,并产生一个到新地址的分支。

2022-04-28 18:26:35 548

转载 x86汇编_补码_笔记_31

补码是一种用二进制表示有符号数的方法。正数和 0 的补码就是该数字本身。负数的补码则是将其对应正数按位取反再加 1。补码系统的最大优点是可以在加法或减法处理中,不需因为数字的正负而使用不同的计算方式。

2022-04-27 15:58:29 446

原创 x86汇编_标志寄存器OF和CF的区别_笔记_30

OF在visual studio里叫OV,CF在visual studio里叫CY。在寄存器和内存里永远只有0和1,可以理解为计算机是不知道正负的。11111110当作无符号数看待是+254,当作有符号数看待是-2。是人按照设定的规则来评判一段内存或寄存器里的内容,才有所谓的正负。虽然计算机无所谓正负数,但人有所谓,这就是OF和CF产生的原因。数字加加减减的过程中可能OF和CF会同时变化。把数字当有符号时要观察OF的变化而不用理会CF,把数字当作无符号时要观察CF的变化而不必理会OF。OF和

2022-04-26 18:30:28 2383

原创 x86汇编_二进制减法_笔记_29

关键点,牢记向更高位借1当10,并注意二进制10-1=1而不是9!

2022-04-25 12:03:23 230

原创 x86汇编_CMP指令_笔记_28

高级语言常用的比较语句:if A > B ...while X > 0 and X < 200 ...if check_for_error(N) = truex86汇编用cmp指令比较整数,因为字符也属于整数,所以也可以使用cmp指令。浮点数需要其它指令来比较,在《汇编语言-基于x86处理器》第12章介绍。cmp 目标操作数,源操作数cmp指令用目标操作数减去源操作数,根据结果来确定溢出、符号、零、进位、辅助进位和奇偶标志位,但不会真的去改变目标操作数,仅改变了标

2022-04-23 15:09:43 8840 1

原创 x86汇编_Visual Studio标志位说明_笔记_27

中文 全称 缩写 1 0 溢出 Overflow flag OF OV NV 方向 Direction flag DF DN UP 中断 Interrupt flag IF EI DI 符号 Sign flag SF NG PL 零 Zero flag ZF ZR NZ 辅助 Auxiliary carry flag AF

2022-04-22 16:41:01 590

原创 x86汇编_布尔指令-AND / OR / XOR / NOT / TEST_笔记_26

Intel指令包含了AND,OR,XOR,NOT,TEST指令,它们能直接在二进制位上实现布尔操作。其中TEST不会改变数据的AND指令,但会改变CPU标志位。部分布尔指令 AND AND 指令在两个操作数的对应位之间进行按位逻辑与操作,并将结果存放在目标操作数中。操作数可以是 8、16、32、64 位,但是两个操作数必须是同样大小。 OR 或 XOR 异或 NOT 非 TEST 与,但不改变内存数据,只改变CPU状态位。 AND指令AND指

2022-04-21 12:06:37 6776

转载 x86汇编_Irvine32链接库过程详细说明_笔记_25

CloseFileCloseFile 过程关闭之前已经创建或打开的文件(参见 CreateOutputFile 和 OpenlnputFile)。该文件用一个 32 位整数的句柄来标识,句柄由 EAX 传递。如果文件成功关闭,EAX 中的返回值就是非零的。示例如下:mov eax,fileHandle call CloseFileClrscrClrscr 过程清除控制台窗口。该过程通常在程序开始和结束时被调用。如果在其他时间调用这个过程,就需要先调用 WaitMsg 来暂停程序,这.

2022-04-14 16:31:40 1730

转载 x86汇编_Irvine32链接库_笔记24

汇编语言编程没有 Microsoft 认可的标准库。在 20 世纪 80 年代早期,程序员第一次开始为 x86 处理器编写汇编语言时,MS-DOS 是常用的操作系统。这些 16 位程序可以调用 MS-DOS 函数(即 INT 21h 服务)来实现简单的输入输出。即使是在那个时代,如果想在控制台上显示一个整数,也需要编写一个相当复杂的程序。专业程序员通常更愿意自己建立库,这是一种很好的学习经验。在 Windows 的 32 位模式下,输入输出库必须能直接调用操作系统的内容。这个学习曲线相当陡峭,对编程初学

2022-04-14 16:28:07 554

转载 x86汇编_VS2019汇编环境添加Irvine32外部链接库_笔记_23

一、VS2019配置汇编环境1、打开VS2019,菜单栏中选择“文件 ” ——“新建”——“项目”,新建一个空的项目,前提是VS2019已经安装了VC++的编译环境,新项目名字自定义设置2、新项目建立完成之后,在“解决方案资源管理器”中右键项目名称,选择“生成依赖项”——“生成自定义”,在弹出的窗口中勾上masm,点击确定。3、还是右键点击项目名称,选择“属性”——“链接器”——“系统”——“子系统”设置为“控制台 (/SUBSYSTEM:CONSOLE)”。提示:配置选..

2022-04-13 14:36:23 1962

原创 x86汇编_uses运算符_笔记_22

uses运算符与proc伪指令一起使用,中间用空格或者TAB分开(不是其它符号),uses的作用是在过程的开始和结束的位置自动生成push和pop指令,避免程序员忘记写出入栈的代码,减少工作量。以下两段代码效果相同:...

2022-04-11 23:50:16 518

原创 x86汇编_利用子过程做整数数组求和_笔记_21

在C++和java写过的利用循环求整数数组之和,在汇编中也很容易实现。现在创建一个专用于统计整数数组各个元素之和的子过程,如下arraysum子过程的设计规范,要求将数组开始位置的地址放入esi寄存器,将数组元素数量放入ecx,然后调用arraysum过程,就可以做数组元素合计,合计结果放在eax寄存器。.386.model flat,stdcall.stack 4096ExitProcess proto,dwExitCode:dword.datathearray dword 1000

2022-04-11 14:30:49 842

原创 x86汇编_CALL和RET指令及过程调用嵌套_笔记_20

CALL指令先把将来要返回的地址放入堆栈,再把即将被执行的过程的地址复制到指针寄存器上,当这个过程执行完要返回时,用RET指令将堆栈中存放的原来的地址放回指针寄存器上。CPU下一步执行哪些内容,是由指针寄存器决定的,这个寄存器存放着地址编码,只要修改这个寄存器CPU就可以到指定位置执行了。32位的指针寄存器叫EIP,16位的叫IP。...

2022-04-08 16:55:26 3006

原创 x86汇编_用独立的过程给三个整数求和_笔记_19

创建一个名为sumof的过程计算三个32位整数之和。用高级语言如C和C++写的函数,通常用AL返回8位的值,用AX返回16位的值,用EAX返回32位的值。

2022-04-08 00:15:57 1012

原创 x86汇编_定义并使用过程_笔记_18

如果学过高级语言,那么就知道将程序分割为子过程是多么有用。在汇编中通常用过程(procedure)来表示,在其它语言中也被称为方法或函数。汇编语言出现得早,因此它不具备面向对像编程中的形式化结构。汇编程序员必须在程序中实现自己的形式化结构。过程用proc和endp伪指令来定义:main proc............main endp当在主程序启动过程之外创建一个过程时,需要用ret指令来结束它:sample proc............retsample endp

2022-03-31 11:20:38 416

原创 x86汇编_堆栈操作基础_笔记_17

堆栈数据结构-stack data structure堆栈的原则是:后进先出(Last-In-First-Out)。运行时的堆栈是一个内存数组,由ESP寄存器负责管理,32位下堆栈的每个字节的地址长度是4个字节。ESP寄存器基本上不会由程序员控制,要用call / ret / push / pop间接修改。ESP总是指向添加或压入到栈顶的最后一个值的内存地址。push的操作数16位的栈顶减2,push的操作数32位的栈顶减4。操作数可以是内存地址、寄存器、立即数。push的操作数如果是立即数,视

2022-03-28 16:12:28 1561

原创 x86汇编_复制字符串_笔记_16

程序常常需要将大块数据从一个位置复制到另一位置,这些数据可以是数组或字符串或其它任何类型对象,在汇编中用循环来复制,变址寻址很适合这种操作。注意,目标存放位置必须有足够空间来存放。; 复制字符串.386.model flat,stdcall.stack 4096ExitProcess PROTO, dwExitCode:dword.datasource byte "This is the source string",0target byte SIZEOF source DU

2022-03-27 23:59:04 775

原创 x86汇编_数组元素汇总_笔记_15

.386.model flat,stdcall.stack 4096ExitProcess PROTO, dwExitCode:dword.dataintarray DWORD 10000h,20000h,30000h,40000h;一个数组,包含4个元素,每个元素占用4个字节.codemain proc mov edi,OFFSET intarray ;将数组的首字节的地址交edi mov ecx,LENGTHOF intarray ;LENGTHOF返回元素数量,用.

2022-03-22 15:48:59 756

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除