2つの数値のどちらが大きいかを判断するためのアセンブラの構文は何ですか?2つの数値を比較するアセンブリ
下位レベル(マシンコード)とは何ですか?私たちはもっと下に行くことができますか?ビットレベルに達すると、どうなりますか? 0と1でどのように表現されていますか?
2つの数値のどちらが大きいかを判断するためのアセンブラの構文は何ですか?2つの数値を比較するアセンブリ
下位レベル(マシンコード)とは何ですか?私たちはもっと下に行くことができますか?ビットレベルに達すると、どうなりますか? 0と1でどのように表現されていますか?
アセンブラによって異なります。 ほとんどのマシンは、R1、EAX(Intel x86)のようなシンボル名 を持つレジスタを提供しており、比較のために "CMP"のような命令を持つ という名前のコマンドを持っています。そして、比較のために 命令を実行するには、別のオペランドが必要です。時には というレジスタがあります。多くの場合、アセンブラ は命令の右側にコメントを許可します。あなたのアセンブラは多少異なる場合があり
<opcode> <register> <operand> ; comment
:よう
命令ラインが見えます。マイクロソフトX86アセンブラについては
、あなたが書くことができます。
CMP EAX、23;レジスタEAXを定数と比較する23
または
CMP EAX、XYZ;さまざまな方法で メモリに対処するために、多くの場合、1は、オペランドフィールド、それは能力を持っている場合は、命令を有効 に複雑な「式」を書くことができ
XYZ
という名前のメモリ位置の内容をEAXを比較レジスタ。しかし、私はこれがあなたの質問に答えると思う。比較の後、アセンブラが一般的に何をしますか?値を返すか、それは使用可能か、特定のレジスタに値を格納しますか? –
CMP命令が実行されると、ほとんどのマシンでは結果が "less"、 "greater"、 "equal"となり、特殊な "条件"レジスタに格納されます。プログラマは通常、条件レジスタを検査し、条件が真であればプログラムフローをjmp命令のタルベットに変更させる "JMP on condition"(例えば "JE"または "jmp equal")をCMP命令に書込みます。アセンブラは何もしなくてはなりません。指示書を次々と書き込むのはプログラムの責任です。アセンブラは、各命令ソース行をバイナリに変換するだけです。 –
ああ大丈夫です!説明ありがとう。それは、私が思うより簡単にしたいことを、 –
まずCMP(比較)命令は、以下のいずれか、次いで呼ばれる:
JLE - 行にジャンプする場合以下
JGEに等しい - 行にジャンプする場合以上
最も低いアセンブラは、バイトではなく、ビットで(直接とにかく)動作します。ビットロジックについて知りたい場合は、回路設計を見ておく必要があります。
はジャンプを行う前に、CMPレジスタ1、レジスタ2を行うことを忘れてはいけません。 MOV AX、1; MOVE BX、2; CMP AX、BX; JLEどこか.. –
基本的な手法(最新のシステムでは)は、2つの数値を減算し、結果の符号ビットをチェックすることです。つまり、結果が0より大きい/等しい/小さいかどうかを確認することです。アセンブリコードではなく、直接結果を取得(レジスタに)状態に応じて、あなたは通常、ちょうどブランチ:
; Compare r1 and r2
CMP $r1, $r2
JLT lessthan
greater_or_equal:
; print "r1 >= r2" somehow
JMP l1
lessthan:
; print "r1 < r2" somehow
l1:
これらの 'JLT'と' JMP'演算子の間にパフォーマンスの違いはありますか? – rejnev
これは、あなたが話しているが、それはの傾向にあるプロセッサに完全に依存し形式:
cmp r1, r2
ble label7
つまり、関連するフラグを設定するための比較命令と、それらのフラグに応じた条件付き分岐が続きます。
これは一般に、プログラミングのために必要な程度に低くなっています。アセンブラを書く場合は、機械語を知る必要があります。プロセッサを構築する場合は、マイクロコードや回路設計だけを知る必要があります。
すでに言及したように、通常はです。比較は、減算によって行われます。
たとえば、X86 Assembly/Control Flowです。
ハードウェアレベルには、addersのような計算を行うための特別なデジタル回路があります。 TASMで
(x86のアセンブリ)、それは次のようになります。この場合は
cmp BL, BH
je EQUAL ; BL = BH
jg GREATER ; BL > BH
jmp LESS ; BL < BH
それは2つの8ビット、我々は一時的に高いに格納番号とレジスタBの下部を比較また、あなたは可能性がありますjbe
(BL < = BHの場合)またはjge
/jae
(BL> = BHの場合)を使用することも検討してください。
うまくいけば、誰かがそれが役に立つ見つけた:)
にしてくれました。おかげで、まっすぐに、より大きい、より少ない、同じくより大きい、より小さい、等しく等しいかより小さいかどうかをあなたのコメントで見てください。 –
input password program
.modle small
.stack 100h
.data
s pasword db 34
input pasword db "enter pasword","$"
valid db ?
invalid db?
.code
mov ax, @ data
mov db, ax
mov ah,09h
mov dx, offest s pasword
int 21h
mov ah, 01h
cmp al, s pasword
je v
jmp nv
v:
mov ah, 09h
mov dx, offset valid
int 21h
nv:
mov ah, 09h
mov dx, offset invalid
int 21h
mov ah, 04ch
int 21
end
これは本当にこの特定の質問に答えません。 – Unihedron
... – Stobor