[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 06/24 11:52 / Filesize : 195 KB / Number-of Response : 910
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

アセンブラ… Part 12



1 名前:デフォルトの名無しさん [2007/08/14(火) 17:18:08 ]

アセンブラ全般に関するスレッドです。

【前スレ】
アセンブラ… ( ゚д゚)ウッウー
pc11.2ch.net/test/read.cgi/tech/1174825173/



66 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 19:01:28 ]
>>63
C> debug hoge.com

67 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 10:43:38 ]
高級プログラマって表現はどうなのかと思った
「高級言語プログラマのための たしなみアセンブラ」
ぐらいが妥当だろ

68 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 11:13:38 ]
これのことだろ。

林晴比古 「高級言語プログラマのためのアセンブラ入門」
ttp://www.sbcr.jp/books/products/detail.asp?sku=4797332816


69 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 18:04:17 ]
TASM タズム

70 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:34:13 ]
LASM ラスム

71 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:39:34 ]
LASM えるあすむ
MASM えむあすむ
NASM えぬあすむ
TASM ていあすむ

72 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:58:23 ]
MASM まさみ

73 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 10:55:56 ]
MASM マシン

74 名前:デフォルトの名無しさん [2007/09/05(水) 00:26:52 ]
int 80h とか int 21h に至るまでをまずやれれば




75 名前:デフォルトの名無しさん [2007/09/05(水) 22:11:27 ]
PEからELFに変換できるツールってありますか?


76 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 23:36:09 ]
call 5とか。
もう使わないか

77 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 10:15:05 ]
>>75
PEはCOFFみたいなものだから
多少自分で前処理する必要があるかもしれないけど
ツールはある
しかし変換しても使えないと思うが

78 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 15:59:22 ]
binutilsのobjcopyをほげれ。

79 名前:デフォルトの名無しさん [2007/09/12(水) 22:59:29 ]
アセンブラ入門のホームページを見ながら勉強してるんですが
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4919.txt
上記のソースで
BUFFER db 128 dup(?)
の部分で128byte初期値無しで宣言したBUFFERに間接的に
値を入れていくのはわかるんですが
invoke MessageBoxA, 0, offset BUFFER, offset TITLENAME, 0
の部分でBUFFERの末尾に0が入ってないと思うんですが
なぜ問題なくMessageBoxAが実行されるか解りません。
すいませんが、どなたか教えていただけないでしょうか。
お願いします。

80 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 23:45:57 ]
>>79
masmがBUFFERの全領域を0で初期化しているようだね。

81 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 09:12:23 ]
( ゚∀゚)<プップー
OSがdataセクションを初期化してる。


82 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 13:56:42 ]
行儀の悪いプログラムだな

83 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 14:08:48 ]
>>79 の記述だとmasmならオブジェクトファイルの段階で128バイトの0が確保されるだろ
OSが初期化するわけではない
ロードはするけど


84 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 14:23:44 ]
セキュリティのためにOSがやってんじゃなかったのか



85 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 23:25:08 ]
>>81
>>81
>>81

86 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 13:19:50 ]
なぜ、初期値を持つdataセクションをOSが初期化すると思うのか?

87 名前:デフォルトの名無しさん [2007/09/14(金) 18:16:40 ]
dataセクションでもexeに無い部分はOSが初期化するんじゃね?

88 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 18:20:51 ]
obj ダンプすりゃわかる 素人だらけw

89 名前:デフォルトの名無しさん [2007/09/14(金) 18:41:40 ]
俺は、
仕様上、
誰かが確実に初期化すると定められたものがあっても、
そういうものに依存するのが嫌なので
自分で必ず初期化するのである。

90 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 18:45:02 ]
C の static に全部 = 0; とか書かかないと気持ち悪いタイプ?

91 名前:デフォルトの名無しさん [2007/09/14(金) 18:47:46 ]
何か
問題
あるかね

92 名前:デフォルトの名無しさん [2007/09/14(金) 18:57:49 ]
分かりやすく言えば、俺が江頭だとして
「この人は佐藤ですからヒップアタックしてください」と
人からアイデンティファイされたものはダメである。
俺が、この目と足でチェックしてはじめて、
「ぅお前は!佐藤だー!!」(ででででーでででででででで)と、
ヒップアタックする気になるのだ。


93 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 20:57:57 ]
staic int i;
if(i) i = 0;

これね

94 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 21:05:09 ]
それは
ちがう
だろう



95 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 22:39:18 ]
MASMの
すごい
初期化

96 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 02:22:32 ]
objをダンプしてexeの中身がわかる人がいるのはこのスレですか?

97 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 04:00:24 ]
アセンブラと機械語は違うけどね。

98 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 13:28:19 ]
初期化しない値は、.dataではなく.data?に書く。

99 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 17:11:23 ]
.bss

100 名前:デフォルトの名無しさん [2007/09/18(火) 15:25:32 ]
age

101 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 01:13:41 ]
>>96
君はわからんのかね

102 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 01:41:38 ]
外部シンボルが未解決でわかりません。

103 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 06:26:18 ]
もとがMASMの話だけにobjdumpもアレだ。

104 名前:デフォルトの名無しさん mailto:sage [2007/09/21(金) 22:58:08 ]
>>102
サブシステム→WinDows



105 名前:デフォルトの名無しさん [2007/10/18(木) 21:25:44 ]
age

106 名前:デフォルトの名無しさん [2007/10/26(金) 00:02:09 ]
KITE-1マイクロプロセッサで
exp(x)=Σ(n=0,∞){1/n!}=1/0!+1/2!+1/3!+…+1/n!
=1+(1+1/2(1+1/3(1+…+1/n)))
の展開した式からネイピア数を求めるアセンブラのプログラムの作り方がさっぱりです。
指定は除算を引き戻し、引き放しで行わず、ループを使わないことらしいです。
ググって見た感じではSRT法を使おうと思っているのですが
これまたアセンブラで表現しようと思うのですがさっぱりです。
どなたかプログラムを教えていただけないでしょうか。
またSRT法以外に簡単な方法ががあるなら是非教えて頂きたいです。
よろしくお願いします。

107 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 19:31:28 ]
>アセンブラのプログラムの作り方がさっぱりです。
うむ、まずアセンブラとテキストエディタを用意しよう!

108 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 19:38:33 ]
インプリメンテーションチャートは?

109 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 13:23:40 ]
int n;
long double e,a,p;
e=0;a=1;n=1;
do {
p=e;e+=a;a/=n;n++;
} while (e != p);

こんなのしかかけないヘタレな俺

110 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 18:35:11 ]
アセンブリでおk

111 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 23:47:27 ]
>>106を解こうとしてsrt除算の上位ビットのからの条件分岐が書けなかった俺は負け組

112 名前:デフォルトの名無しさん [2007/11/02(金) 11:10:15 ]
アセンブラの勉強したくて本がほしいんだけど本屋に全然本が売ってないんだよ
あってもあんまよさそうな本が見つからない
なんかお勧めのアセンブラの本教えてください

113 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 11:30:45 ]
はじめて読む8086あたりでいいんじゃね?

古い本だけど、基本的なことはわかると思うよ


114 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 16:53:33 ]
とりあえず入門用マイコンとしてそこそこのものなら、AVRのTinyあたり?

AVRマイコン活用ブック―オリジナル電子ゲーム&ロボット製作
→アマゾン:ttp://www.amazon.co.jp/AVRマイコン活用ブック―オリジナル電子ゲーム-ロボット製作-わかるマイコン電子工作-松原-拓也/dp/4885540011/ref=pd_bbs_sr_2/503-7396570-5979118?ie=UTF8&s=books&qid=1193988330&sr=8-2

AVRは(PICも)会社によって嫌われることがあるので、あくまで勉強用として。




115 名前:114 mailto:sage [2007/11/02(金) 17:05:00 ]
>>114の補足
この本のプログラムはgccで書かれています。
>gcc -S ...
のように -S オプションを付けてコンパイルするとアセンブラコードが吐き出されるので、
コードと対比させると勉強になると思います。


116 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 18:07:53 ]
他のコンパイラと違って-S付けてもソースコードと混成にならないのが惜しい

117 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 20:51:27 ]
どのコンパイラが?

118 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 00:09:16 ]
>>117
横レスだけどgccで混合できんの?

119 名前:117 mailto:sage [2007/11/03(土) 01:32:44 ]
>>118>>116
ゴメン。今意味が分かった。

120 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 01:40:09 ]
混成表示するにはobjdumpです



121 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 03:03:54 ]
turbo c++ exploreからtasm32.exeを入手できたんですが、
tasm32のドキュメントってどこかにないでしょうか?

122 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 03:18:26 ]
>>121
ttp://citforum.yspu.yar.ru/programming/tasm3/index.shtml

123 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 03:22:32 ]
>>122
ロシア語読めねえよアホ

124 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 03:32:19 ]
ロシア語で考えるんだ!



125 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 03:50:19 ]
しかし、MASMが合法的に無料で手に入る時代にtasm32を使う理由って一体・・・。

126 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 04:41:20 ]
Idealモードフェチの人なんだよきっと

127 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2007/11/03(土) 11:05:47 ]
NASMが64ビット対応してるよ。SSE4.2もAMD SSE5も吐けるよ

128 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 11:06:01 ]
>>125
相変わらず何かのSDKの中について来るの?


129 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2007/11/03(土) 11:09:43 ]
>>128
www.microsoft.com/downloads/details.aspx?FamilyId=7A1C9DA0-0510-44A2-B042-7EF370530C64&displaylang=ja

130 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 22:08:08 ]
>>121
こんなのみつけた
ttp://www.phatcode.net/downloads.php?id=308&action=get&file=pasmug.pdf

ttp://lzasm.hotbox.ru/
によるとTASM5.0のcloneらしい

131 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 23:39:04 ]
>>129
thx

Linkerとかはどうしろって?w


132 名前:ヽ・´∀`・,,)っ━━━━━━┓ mailto:sage [2007/11/05(月) 00:11:03 ]
普通にVC++のリンカ使いましょう。Expressならタダだし。

133 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 15:34:12 ]
課題で質問があるのですが、Formatのような感じで
文字列を表示させるにはどのようにしたらよいでしょうか?

PUSH EBP
MOV EBP,ESP
SUB ESP,104
MOV EAX,DWORD PTR SS:[EBP+C]
AND DWORD PTR SS:[EBP-4],0
MOVZX ECX,BYTE PTR DS:[EAX+F]
PUSH ECX ; /<%02X>
MOVZX ECX,BYTE PTR DS:[EAX+E]
PUSH ECX ; |<%02X>
MOVZX ECX,BYTE PTR DS:[EAX+D]
PUSH ECX ; |<%02X>
MOVZX ECX,BYTE PTR DS:[EAX+C]
PUSH ECX ; |<%02X>
MOVZX ECX,BYTE PTR DS:[EAX+B]
PUSH ECX ; |<%02X>
MOVZX ECX,BYTE PTR DS:[EAX+A]
PUSH ECX ; |<%02X>
MOVZX ECX,BYTE PTR DS:[EAX+9]
PUSH ECX ; |<%02X>
MOVZX ECX,BYTE PTR DS:[EAX+8]
PUSH ECX ; |<%02X>


134 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 15:35:08 ]
MOVZX ECX,WORD PTR DS:[EAX+6]
PUSH ECX ; |<%04X>
MOVZX ECX,WORD PTR DS:[EAX+4]
PUSH ECX ; |<%04X>
PUSH DWORD PTR DS:[EAX] ; |<%08X>
LEA EAX,DWORD PTR SS:[EBP-104]
PUSH testtest.0044AD6C ; |Format = "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}"
PUSH EAX
CALL DWORD PTR DS:[<&USER32.wsprintfA>] ; \wsprintfA
MOV ECX,DWORD PTR SS:[EBP+8]
ADD ESP,34
LEA EAX,DWORD PTR SS:[EBP-104]
PUSH EAX
CALL testtest.0042D903
MOV EAX,DWORD PTR SS:[EBP+8]
LEAVE
RETN 8



135 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 15:42:22 ]
Cで書いて、コンパイラが吐くコード見れば?

136 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 17:12:21 ]
上の2レスがたぶんそうだとおもう

137 名前:アセンブラ初心者 mailto:sage [2007/11/05(月) 21:15:38 ]
いきなり質問失礼します。
8085で、

[8091h] [8090h] ←[8080h]*2+[8081h]    和を16ビットで求める(分岐命令を使用してもよい)

16ビットで求めるという意味がいまいちわかりません。
どなたか解答お願いします。

138 名前:133,134 mailto:sage [2007/11/05(月) 21:54:11 ]
>>135
レスありがとうございます。
一応Cで書くのも考え試したのですがなにぶんアセンブラは素人なものでして…。
PUSHで変数をスタックして上から開いているんだろうなぁっとまでは
なんとなく理解できたのですがCで書いたらエラー吐きまくりで…

できればどなたかヒントか一部サンプルを書いてもらえないでしょうか?

139 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 21:55:23 ]
「8ビット×2+8ビット」の結果は値によって8ビットじゃオーバーフローするじゃん。
だから16ビットで演算して結果を8090-8091H番地に格納すんだろ。

140 名前:アセンブラ初心者 mailto:sage [2007/11/05(月) 22:08:58 ]
>>139
さっそくのレスありがとうございます。
あ、何となくわかったようなきがしました。

LDA 8080h アキュムレータが8080h になって
ADD A アキュムレータが8080h*2になって
MOV M 8080h*2をHLレジスタにコピー
LDA 8081h アキュムレータに8081hをロードして
STAX D 8081hをDEレジスタに格納して
DAD D 8080h*2+8081hをHLレジスタにいれて
SHLD 8090h [8091h][8090h]に8080h*2+8081hを格納

って感じですかね?




141 名前:アセンブラ初心者 mailto:sage [2007/11/05(月) 22:12:24 ]
↑ 見にくかった。
LDA 8080h          アキュムレータが8080h になって
ADD A            アキュムレータが8080h*2になって
MOV M             8080h*2をHLレジスタにコピー
LDA 8081h           アキュムレータに8081hをロードして
STAX D             8081hをDEレジスタに格納して
DAD D               8080h*2+8081hをHLレジスタにいれて
SHLD 8090h               [8091h][8090h]に8080h*2+8081hを格納


142 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 22:12:38 ]
それだとADD A(×2)の時点でオーバーフローすることがある。
が、まぁだいたいそんな感じだ。

143 名前:アセンブラ初心者 mailto:sage [2007/11/05(月) 22:13:41 ]
3番目は MOV Mではなく MOV M,Aでした。

144 名前:アセンブラ初心者 mailto:sage [2007/11/05(月) 22:16:10 ]
なるほど。ありがとうございます。

今日知人に教えてもらうと、
LDA 8080h
MOV L,A
MVI H.0
DAD H
LDA 8081h
MOV D,A
MVI E,0
DAD D
SHLD 8090h

↑のような感じだったんですがこれでもあっているのですか?



145 名前:アセンブラ初心者 mailto:sage [2007/11/05(月) 22:19:09 ]
↑の下から3番目のMVI E,0 は MVI D,0だったかも

146 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 22:27:26 ]
>>145
なら、MOV D,A も MOV E,Aだな。

8085のニモニックよくしランが、
全部16ビットのHL,DEで演算してるようだから多分合ってんじゃね。

蛇足だが、
>>141の方法で、ADD A後、CフラグがONならHに+1すればOK。
多分設問の「分岐命令を使用してもよい」はそれを期待していると思われる。

147 名前:アセンブラ初心者 mailto:sage [2007/11/06(火) 00:58:58 ]
>>146
あなたが神か

アドバイスありがとうございます。
ただ、最後のCフラグがONならHに+1にするほうほうがよくわかりませぬ。
ADD A をADC Aにすればいいのでしょうか?

148 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 01:33:06 ]
ADD A でCがONした場合てのは8ビット同士の加算結果が8ビットを溢れたことを表す。

例)
FF+FF→1FE →Aの内容はFEとなって CがONする→
CがONなら上位8ビット(H)に+1(HLで+100)することで補正する必要あり


...ああ、もう書いちゃえw

H=0;  //あらかじめクリアしとく
A=A+A; //ADD A (桁あふれがあればC_flagが1になる。なければ0になる)
if(C_flag!=0){ //桁あふれあり?
 H++; //演算結果が8ビットで溢れたので上の桁に1を加算(HL全体で+100)
}
L=A; //下位8ビットを格納


Cフラグでの条件分岐命令は調べれ。

149 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 04:55:07 ]
あ〜♪残念、珍しく得意な8085のQが来てたのに、終わっちゃったよ。 蛇足だが、141の
MOV M,A とか、STAX D とかって、アドレッシングの概念間違えてるよ。
左は[HL]<--A で、右は[DE]<--A のこと。 HLとDEを使う知人さんの手法が一般的だけど、
レジスタが足りないようなときには148さんの手法も有効なのね。ADD Aの後はこうなる。
   JNC LBL
   INR  H
LBL: MOV L,A
   SHLD [結果]  こちらの手法のほうが一般性に欠けるかわりに 「軽い」 という利点がある

150 名前:アセンブラ初心者 [2007/11/07(水) 23:24:11 ]
[8081h]←(A+B)*3-[8080h]*2の処理を行うプログラミングを教えてください。

151 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 23:32:45 ]
同じ奴か?
応用だろ。考えろ。

152 名前:アセンブラ初心者 [2007/11/07(水) 23:37:43 ]
違いますよ。初投稿です。

153 名前:アセンブラ初心者 [2007/11/08(木) 00:40:56 ]
本当に、誰か教えてください。考えてもわからない。

154 名前:デフォルトの名無しさん [2007/11/08(木) 00:42:21 ]
応用だろ。ログみて考えろ



155 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 00:47:48 ]
@A+Bはレジスタか?そのまんまだろ。
A3倍はその結果を3回足せばいい。
B[8080h]はメモリからレジスタにロードして、×2は同じものを足せばいい。
CAの結果からBの結果を引いて
D[8081H]に格納

以上。

156 名前:アセンブラ初心者 [2007/11/08(木) 01:05:07 ]
LDA [8080h]
ADD A
MOV C←A
ADD B
ADD A
ADD A
SUB C
STA [8081h]
HLT
こんな感じですか?

157 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 01:18:23 ]
「感じ」としてはそんなもんだが
ADD B
の時点でAの中身がどうなってるかよく考えろ。

158 名前:アセンブラ初心者 [2007/11/08(木) 01:21:06 ]
ADD Bの前にSUB Aを入れればいいのですか?

159 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 02:03:05 ]
>アセンブラ初心者
お前KIT生だろ?

160 名前:アセンブラ初心者 [2007/11/08(木) 02:03:43 ]
そうですけど

161 名前:sage [2007/11/08(木) 02:03:56 ]
>アセンブラ初心者
蜷川先生もここ見てるから、おまえ落第決定だなwwwww

162 名前:age [2007/11/08(木) 02:06:28 ]
>アセンブラ初心者
石塚お兄さんも見ているから覚悟しておけよwwwwwww

163 名前:デフォルトの名無しさん [2007/11/08(木) 02:10:32 ]
注意:
過去最近、試験はできたのにレポートが書けていなくて(あるいは他人の丸写しで)不合格に
なる例が多く見られた。レポートはじっくり時間をかけて考えられるので、レポートでは全員満
点が取れるものとして試験の評価基準を設定してある。必ず満点が取れるような内容のものを提
出すること。よく考えず簡単に書いたまま本当に合っているか再確認を怠ったり、わからないか
らといって一部の問題を未記入で提出することのないよう注意すること。追跡を行うなどして、
答が正しいかよく確認すること。

って先生も言ってんだろ。

164 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 02:25:26 ]
>>156
つ [紙と鉛筆]

レジスタとメモリの内容がどう変化するのか
1命令毎に自分で書き出してみぃや



165 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 07:44:11 ]
>[8081h]←(A+B)*3-[8080h]*2の処理を行うプログラミングを教えてください。
  LHLD [8080h] ; LDAしたらAがなくなっちゃうでしょ
  MVI H,0
  DAD H ; 8bitの加算じゃ元が80h以上の場合オーバーフローする
  MOV E,L
  MOV D,H ; [8080h]*2をDEにsave
  MOV L,A
  MVI H,0 ; Aの値を16bitに
  MOV C,B
  MVI B,0 ; Bの値を16bitに
  DAD B ; (A+B)を計算
  DAD H
  DAD H ; *3
  MOV A,L
  SUB E
  MOV L,A
  MOV A,H
  SBB D
  MOV H,A ; HL-DE "DAD"はあるが"DSUB"が無いので8bitで計算
  SHLD [8081h] ; 結果はぎりぎり8bitに収まる
  HLT

166 名前:165 mailto:sage [2007/11/08(木) 07:51:04 ]
レジスタの使い方の一般則:Aはアキュムレータだから、保持には使わないのが原則。
(計算に使えるように常に空けておくべき)
HLは16bitのアキュムレータとして使う。(8085の命令セットがその思想でできている)
BC,DEは一時的な保持のために使ってよい。
165は冗長だが、この原則で書いてあるので一般性がある。156だと頭でAを壊すとか、
元の値が8bitフルレンジだと結果が正しくならないとかの欠陥がある。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<195KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef