Win32ASM学习[10]:传送指令

 

汇编指令的一般性要求: 1、两个操作数的尺寸必须一致; 2、操作数不能同为内存.
---------------------------------------------------------------------------------------------------------------

;mov

;该指令不影响 EFlags
;指令格式: (其中的 r、m、i 分别表示: 寄存器、内存、立即数)
mov r/m, r/m/i

 

    mov val, 123
    mov  edx
, val
    mov  eax, edx

    PrintDec edx      ;123

---------------------------------------------------------------------------------------------------------------

Lea

;该指令不影响 EFlags
;指令格式:
LEA r, m

 

.data
    szText db 'ABCDEFG', 0
.code
main
proc
    lea eax
, offset szText
    lea ebx, szText
    PrintHex eax ;00403000
    PrintHex ebx ;00403000
    ret
main
endp
end
main

让我感到比较困惑的是   lea 的那条居然会输出地址  - -

---------------------------------------------------------------------------------------------------------------

XCHG(Exchange): 交换指令

 数据交换指令 XCHG

 格式: XCHG OPRD1,OPRD2 其中的OPRD1为目的操作数,OPRD2为源操作数

 功能: 将两个操作数相互交换位置,该指令把源操作数OPRD2与目的操数OPRD1交换.

 说明: 1. OPRD1及OPRD2可为通用寄存器或存储器,但是两个存储器之间是不能用XCHG指令  ----     实现的.

       2. 段寄存器内容不能用XCHG指令来交换.

          示例: XCHG AX,BX
                XCHG SI,AX
                XCHG CL,CH
                XCHG DX,BUFFER
                XCHG CH,DATA2[SI]
                SCHG WORDA,CX
 
       3. 若要实现两个存储器操作数DATA1及DATA2的交换,可用以下指令实现:
          示例: PUSH DATA1
                  PUSH DATA2
                  POP DATA1
                  POP DATA2

          注意: 此处通过中间寄存器,也很容易实现两个存储器操作数的交换.

       4. 本指令不影响状态标志位.

XCHG r/m, r/m

---------------------------------------------------------------------------------------------------------------

XLATB(Translate Byte)、XLAT(Translate): 换码指令

查表指令 XLAT/XLATB
 
 格式: XLAT TABLE 其中TABLE为一待查表格的首地址.
 ----  XLATB TABLE 其中TABLE为一待查表格的首地址.    
 功能: 把待查表格的一个字节内容送到AL累加器中.在执行该指令前,应将 TABLE先送至BX  ----  寄存器中,然后将待查节节与在表格中距表首地址位移量送AL,即 (AL)<--((BX)+(AL)).

;XLATB 可简化为 XLAT
;该指令不影响 EFlags
;XLAT 无参数, 操作和 EBX、AL 相关
;执行 XLAT 前, 先把源地址放入 EBX, 把字节序号放入 AL
;执行后, 指定字节被读入 AL

 

.data
    szText db 'ABCDEFG', 0
.code
main
proc
    lea ebx
, szText

    mov al, 1
    xlat
   

    PrintHex al ;42 - 这是 'B' 的 ASSII 编码
   
    mov al
, 2

    xlatb

    PrintHex al ;43 - 这是 'C' 的 ASSII 编码
    ret
main
endp
end
main

---------------------------------------------------------------------------------------------------------------

MOVSX 指令

格式: MOVSX OPD,OPS

功能: 将8位或16位的OPS符号扩展为16位或32位, 再传给OPD.所谓的符号扩展, 就是当    ----  把一个字节扩展为字或是一字扩展为双字时,高位字节的各位和原数最高位相同,这        可以保证原来用补码表示的数值不变.这条指令一般用于带符号数的扩展.

如果源操作数的最高位是 1, MOVSX 会将目标寄存器中高出的位补 1; 反之补 0

说明: 指令举例

1. MOVSX EAX ,BX    
2. MOVSX ECX,CL    
3. MOVSX DX,DL

 

.data
    bVal   db 90h
    dwVal1 dw 7FFFh
    dwVal2 dw 8000h
.code
main proc
    movzx eax, dwVal1
    movsx edx, dwVal1
    PrintHex eax ;00007FFF
    PrintHex edx ;00007FFF
   
    movzx eax, dwVal2
    movsx edx, dwVal2
    PrintHex eax ;00008000
    PrintHex edx ;FFFF8000
   
    mov cl, bVal
    movzx ax, cl
    movsx dx, cl
    PrintHex ax  ;0090
    PrintHex dx  ;FF90
    ret
main endp
end main
-------------------------------------------------------------------------------------------------------------------------------


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375365.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL Server 中关于 @@error 的一个小误区

SQL Server 中关于 error 的一个小误区 原文:SQL Server 中关于 error 的一个小误区在SQL Server中&#xff0c;我常常会看到有些前辈这样写&#xff1a; if(error<>0)ROLLBACK TRANSACTION T elseCOMMIT TRANSACTION T 一开始&#xff0c;我看见别人这么写&#xff0c;我…

Win32ASM学习[11]:逻辑运算

--------------------------------------------------------------------------------------------------------------------------- 一.逻辑与运算指令 AND 格式: AND OPRD1,OPRD2其中目的操作数OPRD1为任一通用寄存器或存储器操作数.源操作数OPRD2为立即数、任一通用寄存器…

JavaScript消息框

1.警告框 function myTest(){alert("这里的内容会弹出");} 2.确认框 其返回的值是 true 或 false 。 function myTest(){confirm("这里的内容会弹出");} 3.提示框 prompt prompt(参数1&#xff0c;参数2)&#xff1a;其参数1 是显示提示要输入的信息&…

.Net 事务

在分布式应用程序中&#xff0c;不可避免地会经常使用到事务控制。事务有一个开头和一个结尾&#xff0c;它们指定了事务的边界&#xff0c;事务在其边界之内可以跨越进程和计算机。事务边界内的所有资源都参与同一个事务。要维护事务边界内资源间的一致性&#xff0c;事务必须…

Win32ASM学习[12]:位测试指令位扫描指令

----------------------------------------------------------------------------------------------------------------------- 一.BT 指令 格式: BT OPD,OPS 功能: 目的操作数OPD中由源操作数OPS指定的位送CF标志 说明: 1. 在指令中,目的操作数OPD只能是16/32位通用寄存器…

Android WifiDisplay分析一:相关Service的启动

网址&#xff1a;http://www.2cto.com/kf/201404/290996.html 最近在学习Android 4.4上面的WifiDisplay(Miracast)相关的模块&#xff0c;这里先从WifiDisplay用到的各个Service讲起&#xff0c;然后再从WifiDisplaySettings里面讲解打开wfd的流程。首先看下面的主要几个Servic…

mvc controller跳转页面方法

1、直接Redirect后加 Controller/Action Response.Redirect("/User/Edit"); // return Redirect("/User/Edit"); return RedirectToAction("about","Home"); Response.Redirect("/User/Edit"); 2、直接r…

Win32ASM学习[13]:移位指令SHL,SHR,SAL,SAR,ROL,ROR,RCL,RCR,SHLD,SHRD

一. SHL、SHR、SAL、SAR: 移位指令 ---------------------------------------------------------------------------------------------------- ;SHL(Shift Left): 逻辑左移 ;SHR(Shift Right): 逻辑右移 ;SAL(Shift Arithmetic Left): 算术左移 ;SAR(Shift Ari…

angular中的表单验证

angular中的表单验证很强大&#xff0c; 一共有5中验证信息&#xff0c;$valid,$invalid,$pristine,$dirty,$error. $valid-----当验证通过的时候&#xff0c;为true,不通过的时候为false $invalid----当验证不通过的时候&#xff0c;为true&#xff0c;通过的时候为true $pris…

Cortex-A15 Memory Hierarchy

ARM 平台为实现速度和成本的平衡&#xff0c;使用多个层次的内存架构。对于多核 CPU 组成的 SOC&#xff0c;每个CPU 内部都有一组高速缓存&#xff0c;包含&#xff1a;ICache、DCache 和 TLB。多个 CPU 共享一个更大的 L2 缓存。L2缓存再和 CPU 外部的DDR3 内存交互。ICache …

Win32ASM学习[14]:符号扩展指令: CBW,CWDE,CDQ,CWD

----------------------------------------------------------------------------------------------------------------------------------------------------------------- ;CBW(Convert Byte to Word): 将 AL 扩展为 AX ;CWDE(Convert Word to Extended Double): 将 …

Win32ASM学习[15]:加减指令: INC、DEC、NEG、ADD、ADC、SUB、SBB、CMP

------------------------------------------------------------------------------------------------------------------------------------------------------------------- ;INC(Increment): 加一 ;DEC(Decrement): 减一 ;NEG(Negate): 求补(求反) ;ADD(Add): 加 ;A…

UINavigationController的简单使用

UINavigationController的使用步骤初始化UINavigationController设置UIWindow的rootViewController为UINavigationController根据具体情况&#xff0c;通过push方法添加对应个数的子控制器UINavigationController的子控制器UINavigationController以栈的形式保存子控制器proper…

Android 图片的缩略图

<1>简介 之前往往是通过Bitmap、Drawable和Canvas配合完成&#xff0c;需要写一系列繁杂的逻辑去缩小原有图片&#xff0c;从而得到缩略图。 现在我给大家介绍一种比较简单的方法&#xff1a;&#xff08;网上有&#xff09; 在Android 2.2版本中&#xff0c;新增了一个T…

Win32ASM学习[16] :乘除指令: MUL、IMUL、DIV、IDIV

---------------------------------------------------------------------------------------------------------------------------------------------------------------------- 一. 无符号数乘法指令 MUL(MULtiply) 格式: MUL OPRD 功能: 乘法操作. 说明: 1. OPRD为通用…

Linux命令之man

一、引言 一直听别人说linux下有个男人很厉害&#xff0c;遇到不会的不懂的都可以问他&#xff0c;自己也会几个man命令&#xff0c;但是一直不知道到底man命令是怎么用的&#xff0c;比如查询不同类的帮助该在man后跟数字几&#xff0c;man后的数字有什么具体的意思&#xff0…

《JavaScript权威指南》学习笔记 第二天 下好一盘大棋

前段学习js的时候总是零零散散的&#xff0c;以至于很多东西都模棱两可。时间稍微一久&#xff0c;就容易忘记。最主要的原因是这些东西&#xff0c;原来学的时候就不是太懂&#xff0c;以至于和其他知识无法形成记忆链&#xff0c;所以孤零零的知识特别容易忘记。重温犀牛书&a…

Win32ASM学习[17]:条件跳转

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 一.跳转相关的标志位: 11 10 9 8 7 6 5 4 3 2 1 0 OF DF IF TF SF Z…

SUID或SGID程序中能不能用system函数

system()函数的声明和说明如下&#xff1a; 注意它的描述那里&#xff0c;system()执行一个由command参数定义的命令&#xff0c;通过调用/bin/sh -c命令来实现这个功能。也就是说它的逻辑是这样的&#xff01; 进程调用system函数&#xff0c;system函数调用fork创建一个子进程…

史上最全的maven pom.xml文件教程详解

<project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd >; <!-- 父项目的坐标。如果项目中没有规定某个元素的值&am…