. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->外中断
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  请问汇编指令中的HLT,WAIT,LOCK怎么用?  [待解决] 回复[ 3次 ]   点击[ 1116次 ]  
abc58139966
[帖 主]   [ 发表时间:2007-11-22 11:13 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2007-10-24 17:00
请问汇编指令中的HLT,WAIT,LOCK怎么用?有没有相关的代码介绍这三个指令怎么用的.
fishboy
[第1楼]   [ 回复时间:2007-11-22 12:05 ]   [引用]   [回复]   [ top ] 
荣誉值:283
信誉值:0
注册日期:2007-06-26 11:42
hlt   是暂停到一个外部中断的发生就可以继续执行下一条指令,   由于系统中正常情况下,   时钟中断是以18.2次/秒不停地产生的,   所以此指令几乎只起到一个延时的作用,   除非你在   hlt   之前   cli   了,   那可真的是机子   halt   了.   
wait   则是等到浮点运算器对内存的操作完成就可以继续下一指令,   等待的时间一般就比   hlt   短得多了.

在x86平台上,CPU提供了在指令执行期间对总线加锁的手段。CPU芯片上有一条引线#HLOCK pin,如果汇编语言的程序中在一条指令前面加上前缀"LOCK",经过汇编以后的机器代码就使CPU在执行这条指令的时候把#HLOCK pin的电位拉低,持续到这条指令结束时放开,从而把总线锁住,这样同一总线上别的CPU就暂时不能通过总线访问内存了,保证了这条指令在多处理器环境中的原子性。
abc58139966
[第2楼]   [ 回复时间:2007-11-22 12:56 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2007-10-24 17:00
能不能举几个例子看一下
fishboy
[第3楼]   [ 回复时间:2007-12-12 12:36 ]   [引用]   [回复]   [ top ] 
荣誉值:283
信誉值:0
注册日期:2007-06-26 11:42
下面的代码,我在command中运行并没有什么特别的现象。不知道是不是在实dos下才能有结果。楼主自行试试看吧。
assume cs:code,ds:data
data segment
        oper1 dw 1110B
        oper2 dw 11100111B
        result dw ?
data ends
code segment
start:
      MOV ax,data
      MOV ds,ax
      MOV ax,oper1
      ADD ax,oper2
      JGE STORE
      NEG ax
STORE:
      MOV result,ax
      CLI ;设置TF为零
       HLT ;或写为wait
      MOV ax , 4c00H
      INT 21h
code ends
end start
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved