23.10.2014 Views

RealView - ARM Information Center

RealView - ARM Information Center

RealView - ARM Information Center

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

编 写 <strong>ARM</strong> 和 Thumb 汇 编 语 言<br />

2.9.2 无 符 号 整 数 除 法 的 宏 示 例<br />

示 例 2-14 给 出 了 一 个 执 行 无 符 号 整 数 除 法 的 宏 。 它 带 有 四 个 参 数 :<br />

$Bot 存 放 除 数 的 寄 存 器 。<br />

$Top 存 放 指 令 执 行 前 被 除 数 的 寄 存 器 。 执 行 指 令 之 后 , 它 存 放 余 数 。<br />

$Div 存 放 除 法 的 商 的 寄 存 器 。 如 果 只 需 求 余 数 , 它 可 以 是 NULL ("")。<br />

$Temp 计 算 时 使 用 的 临 时 寄 存 器 。<br />

示 例 2-14<br />

MACRO<br />

$Lab DivMod $Div,$Top,$Bot,$Temp<br />

ASSERT $Top $Bot<br />

; Produce an error message if the<br />

ASSERT $Top $Temp<br />

; registers supplied are<br />

ASSERT $Bot $Temp<br />

; not all different<br />

IF "$Div" ""<br />

ASSERT $Div $Top<br />

; These three only matter if $Div<br />

ASSERT $Div $Bot ; is not null ("")<br />

ASSERT $Div $Temp ;<br />

ENDIF<br />

$Lab<br />

MOV $Temp, $Bot ; Put divisor in $Temp<br />

CMP $Temp, $Top, LSR #1 ; double it until<br />

90 MOVLS $Temp, $Temp, LSL #1 ; 2 * $Temp > $Top<br />

CMP $Temp, $Top, LSR #1<br />

BLS %b90 ; The b means search backwards<br />

IF "$Div" "" ; Omit next instruction if $Div is<br />

null<br />

MOV $Div, #0 ; Initialize quotient<br />

ENDIF<br />

91 CMP $Top, $Temp ; Can we subtract $Temp?<br />

SUBCS $Top, $Top,$Temp ; If we can, do so<br />

IF "$Div" "" ; Omit next instruction if $Div is<br />

null<br />

ADC $Div, $Div, $Div ; Double $Div<br />

ENDIF<br />

MOV $Temp, $Temp, LSR #1 ; Halve $Temp,<br />

CMP $Temp, $Bot ; and loop until<br />

BHS %b91 ; less than divisor<br />

MEND<br />

<strong>ARM</strong> DUI 0204BSC © 2002、 2003 <strong>ARM</strong> Limited 版 权 所 有 。 保 留 所 有 权 利 。 2-51

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!