文档章节

初学 Delphi 嵌入汇编[17] - 逻辑运算

涂孟超
 涂孟超
发布于 2014/09/26 15:37
字数 425
阅读 12
收藏 0
AND: 逻辑与指令 OR : 逻辑或指令 XOR: 逻辑异或指令 NOT: 逻辑非指令 这和 Delphi 的逻辑命令完全一致.
//逻辑非 Not: 
{
  not 1 = 0; 
  not 0 = 1;
}
var
  ByteNum: Byte;
begin
  //赋值 11111111B (255) 取反:
  asm
    mov al, 11111111B {eax 包含 ax; ax 包含 al; al 是 eax 的低八位}
    not al            {给 11111111 取反会得到 00000000}
    mov ByteNum, al   {把寄存器 al 中的值给变量 ByteNum}
  end;
  ShowMessage(IntToStr(ByteNum)); {0}


  //赋值 00000001B (1) 取反:
  asm
    mov al, 00000001B
    not al            {给 00000001 取反会得到 11111110}
    mov ByteNum, al
  end;
  ShowMessage(IntToStr(ByteNum)); {254}


  //赋值 10000000B (128) 取反:
  asm
    mov al, 00000001B
    not al            {给 10000000 取反会得到 01111111}
    mov ByteNum, al
  end;
  ShowMessage(IntToStr(ByteNum)); {127}
end;

 
 
 
 
 

 

 

  
//逻辑或 Or: { 1 or 0 = 1; 0 or 1 = 1; 1 or 1 = 1; 0 or 0 = 0; } var ByteNum: Byte; begin asm mov al, 10101010B {170} mov cl, 01010101B {85} or al, cl mov ByteNum, al end; ShowMessage(IntToStr(ByteNum)); {255} end;
//逻辑与 And: { 1 and 1 = 1; 1 and 0 = 0; 0 and 1 = 0; 0 and 0 = 0; } var ByteNum: Byte; begin //例1 asm mov al, 11111111B {255} mov cl, 11111111B {255} and al, cl mov ByteNum, al end; ShowMessage(IntToStr(ByteNum)); {255} //例2 asm mov al, 00000000B {0} mov cl, 00000000B {0} and al, cl mov ByteNum, al end; ShowMessage(IntToStr(ByteNum)); {0} //例3 asm mov al, 11111111B {255} mov cl, 00000000B {0} and al, cl mov ByteNum, al end; ShowMessage(IntToStr(ByteNum)); {0} //例4 asm mov al, 10101010B {170} mov cl, 01010101B {85} and al, cl mov ByteNum, al end; ShowMessage(IntToStr(ByteNum)); {0} end;
//逻辑异或 Xor: { 1 Xor 0 = 1; 0 Xor 1 = 1; 1 Xor 1 = 0; 0 Xor 0 = 0; } var ByteNum: Byte; begin //例1 asm mov al, 11111111B {255} mov cl, 11111111B {255} xor al, cl mov ByteNum, al end; ShowMessage(IntToStr(ByteNum)); {0} //例2 asm mov al, 11111111B {255} mov cl, 00000000B {0} xor al, cl mov ByteNum, al end; ShowMessage(IntToStr(ByteNum)); {255} //例3 asm mov al, 10101010B {170} mov cl, 01010101B {85} xor al, cl mov ByteNum, al end; ShowMessage(IntToStr(ByteNum)); {255} end;

本文转载自:http://www.cnblogs.com/del/archive/2008/01/28/1055648.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
编写高效简洁的C语言代码,是许多软件工程师追求的目标。各位有什么高招呢?请不吝赐教。。。

以下是我个人的一些体会和经验,不对的地方请各位指教。同时希望各位拿出自己的干货分享一下经验 第1招:以空间换时间   计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发...

刘学炜
2012/04/17
726
4
C语言嵌入式系统编程修炼之性能优化

这是我13年前创作和发表在互联网上的文章,这么多年过去了,这篇文章仍然在到处传播。现在贴回Linuxer公众号。 全文目录: C语言嵌入式系统编程修炼之道——背景篇 C语言嵌入式系统编程修炼之...

jus3ve
2017/12/31
0
0
开源的系统级编程利器:D语言

在Digital Mars公司的D语言首 页上,放置着这样一段话“计算机编程语言门类众多,其来源大致可分为两种途径。一类新语言来自于极具创新精神的学术界;而一类则源于关注研发结合和互联网 的新...

小卒过河
2011/10/11
4.7K
21
SHA512编程实现与优化之一:maj函数

SHA512算法中的maj函数可以C函数简单方便地实现: 从字面上看,逻辑乘"&"有3次,异或"^"有2次,事实真的如此吗? 将此函数编译成汇编语言得到如下结果:(注释是我后加上的) 阅读汇编代码可知...

safedead
2016/05/20
49
0
ARM嵌入式开发中的GCC内联汇编简介

ARM嵌入式开发中的GCC内联汇编简介 嵌入式开发交流群280352802,欢迎加入! 在针对ARM体系结构的编程中,一般很难直接使用C语言产生操作协处理器的相关代码,因此使用汇编语言来实现就成为了...

长平狐
2013/06/03
70
1

没有更多内容

加载失败,请刷新页面

加载更多

Java日期和时间获取问题

获取年月日时分秒 Calendar cal = Calendar.getInstance();//获取年int year = cal.get(Calendar.YEAR);//获取月,范围是0-11,最后使用需+1int month = cal.get(Cal...

lanyu96
26分钟前
7
0
Ceph学习笔记2-在Kolla-Ansible中使用Ceph后端存储

环境说明 使用Kolla-Ansible请参考《使用Kolla-Ansible在CentOS 7单节点上部署OpenStack Pike》; 部署Ceph服务请参考《Ceph学习笔记1-Mimic版本多节点部署》。 配置Ceph 以osdev用户登录: ...

LastRitter
30分钟前
6
0
OSChina 周二乱弹 —— 老司机表示右手无处安放

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @花间小酌 :分享李宗盛的单曲《鬼迷心窍》--春风再美也比不上你的笑 《鬼迷心窍》 - 李宗盛 手机党少年们想听歌,请使劲儿戳(这里) 每天早...

小小编辑
42分钟前
225
5
复习2

10月22日任务 awk 中使用外部shell变量 awk 合并一个文件 把一个文件多行连接成一行 awk中gsub函数的使用 awk 截取指定多个域为一行 过滤两个或多个关键词 用awk生成以下结构文件 awk用print...

hhpuppy
50分钟前
5
0
原型模式

1、原型模式-定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 克隆(浅度克隆->拷贝值类型或者引用,深度克隆->创建新的对象,开辟新的内存) 例如客户端知道抽象Pro...

阿元
今天
62
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部