【转贴】80386ASM程序设计基础(七)

线程中CreateEvent和SetEvent和ReSetEvent及WaitForSingleObject的用法 概述 首先介绍CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,程锁定方面. CreateEvent:创建或打开一个命名的或无名的事件对象. EVENT有两种状态:发信号,不发信号。 SetEvent/ResetEvent分别将EVENT置为这两种状态分别是发信号与不发信号。 WaitForSingleObject()等待,直到参数所指定的OBJECT成为 阅读详情
位操作指令,处理器控制指令
 AA.位操作指令,8086新增的一组指令,包括位测试,位扫描。BT,BTC,BTR,BTS,BSF,BSR
 a.BT(Bit Test),位测试指令,指令格式:
   BT OPRD1,OPRD2,规则:操作作OPRD1可以是16位或32位的通用寄存器或者存储单元。操作数OPRD2必须是8位立即数或者是与OPRD1操作数长度相等的通用寄存器。如果用OPRD2除以OPRD1,假设商存放在Divd中,余数存放在Mod中,那么对OPRD1操作数要进行测试的位号就是Mod,它的主要功能就是把要测试位的值送往CF,看几个简单的例子:
 b.BTC(Bit Test And Complement),测试并取反用法和规则与BT是一样,但在功能有些不同,它不但将要测试位的值送往CF,并且还将该位取反。
 c.BTR(Bit Test And Reset),测试并复位,用法和规则与BT是一样,但在功能有些不同,它不但将要测试位的值送往CF,并且还将该位复位(即清0)。
 d.BTS(Bit Test And Set),测试并置位,用法和规则与BT是一样,但在功能有些不同,它不但将要测试位的值送往CF,并且还将该位置位(即置1)。
 e.BSF(Bit Scan Forward),顺向位扫描,指令格式:BSF OPRD1,OPRD2,功能:将从右向左(从最低位到最高位)对OPRD2操作数进行扫描,并将第一个为1的位号送给操作数OPRD1。操作数OPRD1,OPRD2可以是16位或32位通用寄存器或者存储单元,但OPRD1和OPRD2操作数的长度必须相等。
 f.BSR(Bit Scan Reverse),逆向位扫描,指令格式:BSR OPRD1,OPRD2,功能:将从左向右(从最高位到最低位)对OPRD2操作数进行扫描,并将第一个为1的位号送给操作数OPRD1。操作数OPRD1,OPRD2可以是16位或32位通用寄存器或存储单元,但OPRD1和OPRD2操作数的长度必须相等。
 g.举个简单的例子来说明这6条指令:

 AA DW 1234H,5678H
 BB DW 9999H,7777H
 MOV EAX,12345678H
 MOV BX,9999H
 BT EAX,8;CF=0,EAX保持不变
 BTC EAX,8;CF=0,EAX=12345778H
 BTR EAX,8;CF=0,EAX=12345678H
 BTS EAX,8;CF=0,EAX=12345778H
 BSF AX,BX;AX=0
 BSR AX,BX;AX=15
 
 BT WORD PTR [AA],4;CF=1,[AA]的内容不变
 BTC WORD PTR [AA],4;CF=1,[AA]=1223H
 BTR WORD PTR [AA],4;CF=1,[AA]=1223H
 BTS WORD PTR [AA],4;CF=1,[AA]=1234H
 BSF WORD PTR [AA],BX;[AA]=0;
 BSR WORD PTR [AA],BX;[AA]=15(十进制) 
 
 BT DWORD PTR [BB],12;CF=1,[BB]的内容保持不变
 BTC DWORD PTR [BB],12;CF=1,[BB]=76779999H
 BTR DWORD PTR [BB],12;CF=1,[BB]=76779999H
 BTS DWORD PTR [BB],12;CF=1,[BB]=77779999H
 BSF DWORD PTR [BB],12;[BB]=0
 BSR DWORD PTR [BB],12;[BB]=31(十进制) 

 BB.处理器控制指令
 处理器控制指令主要是用来设置/清除标志,空操作以及与外部事件同步等。
 a.CLC,将CF标志位清0。
 b.STC,将CF标志位置1。
 c.CLI,关中断。
 d.STI,开中断。
 e.CLD,清DF=0。
 f.STD,置DF=1。
 g.NOP,空操作,填补程序中的空白区,空操作本身不执行任何操作,主要是为了保持程序的连续性。
 h.WAIT,等待BUSY引脚为高。
 i.LOCK,封锁前缀可以锁定其后指令的操作数的存储单元,该指令在指令执行期间一直有效。在多任务环境中,可以用它来保证独占其享内存,只有以下指令才可以用LOCK前缀:
  XCHG,ADD,ADC,INC,SUB,SBB,DEC,NEG,OR,AND,XOR,NOT,BT,BTS,BTR,BTC
 j.说明处理器类型的伪指令
  .8086,只支持对8086指令的汇编
  .186,只支持对80186指令的汇编
  .286,支持对非特权的80286指令的汇编
  .286C,支持对非特权的80286指令的汇编
  .286P,支持对80286所有指令的汇编
  .386,支持对80386非特权指令的汇编
  .386C,支持对80386非特权指令的汇编
  .386P,支持对80386所有指令的汇编
  只有用伪指令说明了处理器类型,汇编程序才知道如何更好去编译,连接程序,更好地去检错。
  在后续的几篇里将详细介绍80386的段页管理机制及控制寄存器,调试寄存器,以及如何在386实模下和保护模式下编程。

事件SetEvent、RestEvent、WaitForSingleObject与CreateEvent详解 SetEvent/ResetEvent分别将EVENT置为这两种状态分别是发信号与不发信号。 WaitForSingleObject()等待,直到参数所指定的OBJECT成为发信号状态时才返回,OBJECT可以是EVENT,也可以是其它内核对象。 CreateEvent 用来创建或打开一个命名的或无名的事件对象,对于它的其他解释,请自行百科,这里只简单描述它的两种常用用法! CreateEvent... 阅读详情

相关推荐

windows线程 事件CreateEvent、SetEvent、ResetEvent、CloseHandle

windows线程 事件CreateEvent、SetEvent、ResetEvent、CloseHandle

单于的学习历程 1680

80386ASM程序设计基础()

 位操作指令,处理器控制指令 AA.位操作指令,8086新增的一组指令,包括位测试,位扫描。BT,BTC,BTR,BTS,BSF,BSR a.BT(Bit Test),位测试指令,指令格式:   BT OPRD1,OPRD2,规则:操作作OPRD1可以是16位或32位的通用寄存器或者存储单元。操作数OPRD2必须是8位立即数或者是与OPRD1操作数长度相等的通用寄存器。如果用OPRD2除以OPRD

kingcaiyao的专栏 1852

ICC2: place阶段的clock network delay

设置了set_clock_latency之后,即便没长tree,也会有反标值,显示为clock network delay(ideal)和设置的clock latency值,需要注意的是同时设置set_clock_latency和set_clock_latency -source,clock network delay(ideal)值是二者叠加的。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 282

80386ASM程序设计基础()

   在接下来的四篇里将介绍80386汇编指令及用法,并和8086的指令进行比较。   80386的指令集包含了8086/8088,80186,80286的指令集,可以分为几个大类:数据传送指令,算术运算/逻辑运算指令,移位指令,控制转移指令,串操作指令,高级语言支持的指令,条件字节设置指令,位操作指令,处理器控制指令和保护方式指令。高级语言支持指令始于80186,保护方式指令始于80286,条

kingcaiyao的专栏 2730

80386ASM程序设计基础

虽然80386处理器要较以前的处理器的功能大大增强,但这些功能只能在保护模式下才能全部得到发挥。在实模式下最大寻址空间只有1M,但在保护模式最大寻址空间可达4G,可以访问到所有的物理内存。同时由于引入虚拟内存的概念,在程序设计中可使用的地址空间为64TB。80386处理器采用了可扩充的分段管理和可选的分页管理机制,这两个存储管理机制由MMU(Memory Management Unit)部件来

tasty 388

如何做demo演示

<br /><br /> 1. 介绍项目支持哪些功能,主要介绍用户需要维护的测试用例文件,用户如何维护这个文件。<br /> <br /> 2. 运行脚本。<br /> <br /> 3. 如何检查测试结果。<br /> <br />注意事项:1. 不要详细介绍项目脚本,以免混乱用户思路。<br />                2. 主要介绍用户需要维护的测试用例文件。

飘留一丝清香 6315

C++事件SetEvent,ResetEvent的使用

一、概念 创建事件: HANDLE CreateEvent(  LPSECURITY_ATTRIBUTES lpEventAttributes, // SECURITY_ATTRIBUTES结构指针,可为NULL  BOOL bManualReset, // 手动/自动  // TRUE:表示手动,在WaitFo...

只为龙舞的博客 1万+

SetEvent()和ResetEvent()

设置事件为有信号状态时,线程就执行完毕了!! BOOL SetEvent(HANDLE hEvent); 其中hEvent表示句柄,返回值:如果操作成功,则返回非零值,否则为0。 说明 设置事件的状态为有标记,释放任意等待线程。 如果事件是手工的,此事件将保持有标记直到调用ResetEvent,这种情况下将释放多个线程; 如果事件是自动的,此事件将保持有标记,直到一个线程被释放,系统将...

zxf347085420的博客 8282

c++中SetEvent和ResetEvent的使用

关于事件   事件(Event)是WIN32提供的最灵活的线程间同步方式,事件可以处于激发状态(signaled or true)或未激发状态(unsignal or false)。根据状态变迁方式的不同,事件可分为两类:   (1)手动设置:这种对象只可能用程序手动设置,在需要该事件或者事件发生时,采用SetEvent及ResetEvent来进行设置。   (2)自动恢复:一旦事件发生并被处理后...

u011555996的博客 2468

[转] MFC: ResetEvent、CreateEvent、SetEvent

ResetEvent、CreateEvent、SetEvent http://hi.baidu.com/naxiaohe010/blog/item/ee8f54acc29550f6faed5053.html  ResetEvent

我就是我 1万+

CreateEvent、SetEvent、ResetEvent和WaitForSingleObject

事件对象就像一个开关:它只有两种状态---开和关。当一个事件处于”开”状态,我们称其为”有信号”,否则称为”无信号”。可以在一个线程的执行函数中创建一个事件对象,然后观察它的状态,如果是”无信号”就让该线程睡眠,这样该线程占用的CPU时间就比较少。 产生事件对象的函数如下: (1)CreateEvent 函数原型: HANDLE CreateEvent(

gateway6143的专栏 6826

SetEvent/ResetEvent

在自动重置事件对象中,当WaitSingleObject/WaitForMultipleObjects接收到SetEvent发送过来的信号后则返回WAIT_OBJECT_0,此时操作系统(待定)自动重置等待的事件对象(即自动将其设置为无信号状态。无论何时通过SetEvent发送过来的信号,只要未被接收到均不会被自动重置。但在未被接收之前可以调用ResetEvent手动重置等待的事件对象,此时等待的

tjv001的专栏 1万+

Windows编程之CreateEvent,WaitForSingleObject,SetEvent,ResetEvent函数

一 Windows编程之CreateEvent,WaitForSingleObject,SetEvent,ResetEvent函数 1 CreateEvent HANDLE WINAPI CreateEventW( _In_opt_ LPSECURITY_ATTRIBUTES lpEventAttributes, _In_ BOOL bManualReset, _In_ BOOL bInitialState, _In_opt_ LPCWSTR lpName ); /*

weixin_44517656的博客 2123

SetEvent()和ResetEvent()详解

在Windows编程中,事件是一种同步对象,用于在多线程环境中进行线程通信和同步。事件有两个主要操作:设置事件(SetEvent())和清除事件(通过本文的详细解析,我们深入了解了Windows编程中的同步利器——SetEvent()和。在多线程编程中,合理使用事件同步是确保程序正确、高效运行的关键一环。

聚娃科技开发者博客 926

CreateEvent() SetEvent() ResetEvent() 进程互斥

首先介绍CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,程锁定方面. CreateEvent 函功能描述:创建或打开一个命名的或无名的事件对象. EVENT有两种状态:发信号,不发信号。  SetEvent/ResetEvent分别将EVENT置为这两种状态分别是发信号与不发信号。  WaitForSingleObject()等待,直到

LKMIRACLE的专栏 1198

CreateEvent/OpenEvent/SetEvent/ResetEvent/WaitForSingleObject 相关用法说明

CreateEvent 创建一个事件HANDLE WINAPI CreateEvent( __in_opt LPSECURITY_ATTRIBUTES lpEventAttributes, //如果为空handle不能被子进程继承 __in BOOL bManualReset, //如果为true,需要手动ResetEvent __in BOOL bI

Orlando的积累知识库 3655

2024年数字IC秋招-华为机试-数字芯片-实习笔试题

笔试题目:40个选择题A.综合时不同文件列表内的宏定义仅在本列表生效B.宏定义会覆盖,不需要单独undefC.仿真时出现宏定义冲突以最后一次值为准D.宏定义最好在各文件中随用随定义A.4/9B.4/6C.01D.0/6。

qq_42135020的博客 2829

simulink的buck电路仿真

使用matlab进行的buck电路仿真,分析电力电子的电路运行。

上一篇: 【转贴】80386ASM程序设计基础(六)
下一篇: 【转贴】80386ASM程序设计基础(八)
TalosChen
博客等级 码龄23年 1粉丝 4原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值