1. 程式人生 > >彙編的jl、jg與jb、ja

彙編的jl、jg與jb、ja

稍做修改再看:
  mov ax,-100
  mov bx,-110
  cmp ax,bx ;ax>bx
  jb @Skip ;這裡是大於,call skip將被執行
  ;jl @Skip
  call skip
  @Skip:
這個例子執行後你會發現call skip執行了,也就是說條件正確,可是這個例子中兩個運算元都是負數(ja/jb是用於無符號數的),為什麼會正確?這是因為IBM-PC負數是用補碼錶示的,-100與-110在暫存器內的值其實是這個暫存器的最大值減去當前值的絕對值,16位暫存器最大值是65536,那麼上述程式碼中ax=65536-|ax|=65436,bx=65536-|bx|=65426,那麼cmp ax,bx就和第一個例子中cmp ax,bx相同了.(注意:ax=-100=有符號數-100的補碼=65436,但是直接提供65436則是視做無符號數65436而不是-100)