こんにちは。
アセンブラのMASM でプログラムを作っているのですが、サンプルプログラムで、
「ASSUME CS:_TEXT」という表現があるのですが、これは一体どういう意味なのでしょうか?
よろしくご回答のほどお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

MASMのバージョンにより内部処理が異なるかもしれませんが、これは「CS(コードセグメント)に_TEXTという名前を使うよ!」と言っているだけで、これだけでは何も起きません。



プログラム中でCS(コードセグメント)を操作するようなことをすると、それを検出してワーニングとして教えてくれます。ただそれだけなんです。

他に何かしてくれるのか?っていったら何もしてくれないのです。今、これを気にしているくらいならそんなに大きいアプリケーションをアセンブラで作成したことがないのだと思うのですが、ソースリスト数
がたくさんあった場合に、アセンブルエラーの追跡に役立つということはあります。

そんなに気にする問題ではありません。それよりもたくさんプログラムを書いてスキルアップに励んでください。
    • good
    • 0

こんばんは。


私もちょっと忘れてしまい、参考書を見て復習しました。
セグメントについては、分かっていらっしゃいますよね。

ASSUME 文は、セグメントレジスタとセグメントとの対応を、
MASM に教えることにより、正しくアセンブルするための擬似命令です。

つまり、“ASSUME CS:_TEXT”の場合、
「CSレジスタは、_TEXTセグメントを指していますよ。」
と MASM に宣言しているのです。
(この文で実際に、セグメントレジスタに値が代入されるわけではありません。)

この宣言がないと、MASM がアセンブルするとき、データラベル等の
アドレスの計算が正しくできなくなります。
だから、実際にセグメントレジスタに値をセットする場合は、
その前に、この文を宣言する必要があります。
    • good
    • 0

こんばんは。


すっかり忘れてしまいましたが、こういう意味だったと思います。

コードセグメントは_TEXTですよ。とある種の宣言をします。
ご存じのように8086は8080系の資産を継承できるように64KBのセグメントの概念があります。
勿論、ESを別セグメントにASSUMEすることも可能です。
COMモデルの実行プログラムを作成するために、すべてのセグメントを同一にするのが一般的です。
セグメントの宣言をしておかないと最終的にEXE2BINでEXEモデルからCOMモデルに変換できません。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QCOMETII上で動作するアセンブラ言語によるプログラム

このまえ投稿したのですがやり方が悪く削除されてしまいました。

答えてくださった方々、申し訳ありません。

学校で下に示すプログラムを1行づつ解析し行っている処理を見出せというものでした。

EX307 START
LD GR0,A
LEA GR1,0
LOOP SUB GR0,B
JMI ENDDV
LEA GR1,1,GRI
JMP LOOP
ENDDV ADD GR0,B
ST GR1,ANS
ST GR0,B
EXIT
A DC 50
B DC 8
ANS DC 1
REM DC 1
END

2行目のAの50をロードしてGR0に入るって言うのがわかりましたが、LEAやらSUB、最初のEX307の意味もわかりません。

よろしくお願いします。

Aベストアンサー

この前回答したzwiです。
どんな答えをしたか忘れたのですが、もう一度書いてみます。
COMETIIは詳しくありませんが、アセンブラなら色んなCPUを渡り歩いているので大体わかります。

>2行目のAの50をロードしてGR0に入るって言うのがわかりましたが、LEAやらSUB、最初のEX307の意味もわかりません。
LEAやSUBはCOMET(CASL)の古い命令みたいですね。いくつか間違いがあります。
LEA→LAD 実行アドレスをロードする(あるいは値をロードする)
SUB→SUBA 符号付引き算をする命令。
ADD→ADDA 符号付足し算をする命令。
EXIT→RET 呼び出しもとに帰ります。メインなら終了です。
と読み替えてください。
COMETとCOMETIIの対応表です。googleのキャッシュです。
http://72.14.235.104/search?q=cache:0sgq6upY1kAJ:www.ced.is.utsunomiya-u.ac.jp/lecture/2006/jikken1/casl/spec.htm+%EF%BC%A3%EF%BC%A1%EF%BC%B3%EF%BC%ACII%E3%80%80SUB&hl=ja&ct=clnk&cd=1&gl=jp&lr=lang_ja

EX307は単なるラベルで,START擬似命令でここからプログラムを開始しますよ~って意味です。
http://www.officedaytime.com/dcasl2/pguide/chapter1f.html

[参考サイト]
もう一度入門サイトを紹介しておきます。
http://itpro.nikkeibp.co.jp/article/COLUMN/20070404/267378/?ST=techskill
シミュレータで動かして実際に確認してみてください。
http://www.vector.co.jp/soft/win95/prog/se184950.html

この前回答したzwiです。
どんな答えをしたか忘れたのですが、もう一度書いてみます。
COMETIIは詳しくありませんが、アセンブラなら色んなCPUを渡り歩いているので大体わかります。

>2行目のAの50をロードしてGR0に入るって言うのがわかりましたが、LEAやらSUB、最初のEX307の意味もわかりません。
LEAやSUBはCOMET(CASL)の古い命令みたいですね。いくつか間違いがあります。
LEA→LAD 実行アドレスをロードする(あるいは値をロードする)
SUB→SUBA 符号付引き算をする命令。
...続きを読む

QPythonの設定方法(text_factory)

あるシステムを実行すると、下記エラーが表示されました。
---------------
Traceback (most recent call last):
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\web\api.py", line 446, in send_error
data, 'text/html')
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\web\chrome.py", line 830, in render_template
message = req.session.pop('chrome.%s.%d' % (type_, i))
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\web\api.py", line 216, in __getattr__
value = self.callbacks[name](self)
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\web\main.py", line 306, in _get_session
return Session(self.env, req)
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\web\session.py", line 223, in __init__
self.promote_session(sid)
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\web\session.py", line 282, in promote_session
@self.env.with_transaction()
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\db\api.py", line 77, in transaction_wrapper
fn(ldb)
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\web\session.py", line 287, in update_session_id
""", (sid, self.req.authname))
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\db\util.py", line 65, in execute
return self.cursor.execute(sql_escape_percent(sql), args)
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\db\sqlite_backend.py", line 78, in execute
result = PyFormatCursor.execute(self, *args)
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\db\sqlite_backend.py", line 56, in execute
args or [])
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\db\sqlite_backend.py", line 48, in _rollback_on_error
return function(self, *args, **kwargs)
ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings.
-----------------

調査してみたら、Pythonで、 text_factory = str を設定したら良いとわかりましたが、設定方法が
わかりません。
対話モードで設定したら良いのでしょうか?
Pythonに関しては全然わからないのでどのように設定したら良いかがわかりません。
教えてください。

よろしくお願いします。

あるシステムを実行すると、下記エラーが表示されました。
---------------
Traceback (most recent call last):
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\web\api.py", line 446, in send_error
data, 'text/html')
File "C:\TracLight\python\lib\site-packages\trac-0.12.4.ja1-py2.6.egg\trac\web\chrome.py", line 830, in render_template
message = req.session.pop('chrome.%s.%d' % (type_, i))
File "C:\TracLight\python\lib\site-packages\trac-0....続きを読む

Aベストアンサー

もう一度、マニュアルをよく読んでください。

> この属性を使って TEXT データ型をどのオブジェクトで返すかを制御できます
とあります。つまり、「この属性」= text_factory です。

> デフォルトではこの属性は unicode に設定されており
> str に設定してください
と続いて
>この属性を sqlite3.OptimizedUnicode に設定してください
なのですから、よほどの駄文でなければ、 「この属性」= text_factory だとわかります。

「これを有効にしたければ」の「これ」とは、その前の「非ASCIIデータに限って Unicode オブジェクトを返し、 その他の場合にはバイト列を返す」ことです。
これは原文の
> To activate it,
の方がわかりやすいかもしれません。


さらに、サンプルコードを見ると
con.text_factory = sqlite3.OptimizedUnicode
というコードがあるのがわかります。

QCSSのtext-decoration: none;が効かない

こんにちは。
CSSでリストタグ内のリンクのアンダーラインを消すために、

.side_menu li {
line-height: 100%;
border-bottom: 1px solid #FFFFFF;
}
.side_menu a {
display: block;
padding-left: 30px;
background: #FFFFFF;
width: 160px;
text-indent: -17px;
text-decoration: none;
}
.side_menu a:hover {
background: #BDE2F7;
text-decoration: none;
}

としました。
作業しているうちに、きちんと消えていたリンクのアンダーラインが付いているのに気づきました。
すべてにではなく、数行なのです。付いてないところもあります。
htmlにゴミが入ってるのかと思い、再入力したのですがなぜか傷が広がります。
こんな現象って・・・?
text-decoration: none;を効かせるには、どう対処すればいいのでしょうか?
よろしくお願いします。

こんにちは。
CSSでリストタグ内のリンクのアンダーラインを消すために、

.side_menu li {
line-height: 100%;
border-bottom: 1px solid #FFFFFF;
}
.side_menu a {
display: block;
padding-left: 30px;
background: #FFFFFF;
width: 160px;
text-indent: -17px;
text-decoration: none;
}
.side_menu a:hover {
background: #BDE2F7;
text-decoration: none;
}

としました。
作業しているうちに、きちんと消えていたリンクのアンダーラインが付いているのに気づきました。
すべてに...続きを読む

Aベストアンサー

質問文に挙げられていない部分のCSSの記述が影響しているのかもしれません。
他のリンクに付けたつもりのtext-decoration:underline;が効いてしまっているとか。

念のために次のように書いておいてみてはどうでしょうか?
.side_menu a:link {text-decoration: none;}
.side_menu a:visited {text-decoration: none;}
.side_menu a:hover {background: #BDE2F7;text-decoration: none;}
.side_menu a:active {text-decoration: none;}
※ :link~ :activeまでの順序も大事です。

Qアセンブラプログラム

PICでモールス信号の「SOS」を感知するプログラムを作成したいのですが、プログラムを組めなくて困ってます。ハードの仕様は光感知をフォトトランジスタでし、PICにあらかじめいれておいた「SOS」のデータと照合し、認証したら豆電球がひかるという仕様です。よろしくお願いします。

Aベストアンサー

仕様があまりにも不明確ですのでポイントを外しているかもしれませんが。。。

モールス符号の解読ということは、入力信号から短点、長点、符号間隔、文字間隔、語間隔を判別しないといけません。
信号を出すのが機械ならほぼ一定間隔で受けられるのであまり難しくはないですが、相手が人間だと非常に苦労すると思います。
どういう方針で判別を行なおうと考えておられるのでしょうか?
一番単純なのは、短点の長さは50m秒~100m秒と固定して、信号のOFF→ONの立ち上がりエッジから25m秒間隔で信号を見て、ONが2回~5回続いたら短点、6回以上なら長点という判断でしょう。次はOFFの回数を数えます。
SOSに限れば文字間隔は出てこないので、短点、長点、語間隔を判別できればいいと思います。また、最初は短点と分かっているのでその長さを元に次のサンプリングのタイミングを決める手もあります。
精度を上げるためには、電気的なノイズを取り除く回路(またはソフト)、速度変化に追従するソフトのしくみ、異常な長さのONを排除するしくみなどいろいろと気を使わないといけませんね。

仕様があまりにも不明確ですのでポイントを外しているかもしれませんが。。。

モールス符号の解読ということは、入力信号から短点、長点、符号間隔、文字間隔、語間隔を判別しないといけません。
信号を出すのが機械ならほぼ一定間隔で受けられるのであまり難しくはないですが、相手が人間だと非常に苦労すると思います。
どういう方針で判別を行なおうと考えておられるのでしょうか?
一番単純なのは、短点の長さは50m秒~100m秒と固定して、信号のOFF→ONの立ち上がりエッジから25m秒間隔で信号を見て、ON...続きを読む

Qアセンブラ言語の数字を数値に変換するプログラム

LD GR3,GR1 ;GR3にGR1の数字を入れる。
AND GR3,=#000F ;数字を数値に変換

というアセンブラのプログラムがあったのですが、なぜGR3と16進数#000Fの論理積をとることで数字を数値に変換できるのでしょうか。

それと、ここでいう数字、数値の違いとは、数字の1はコンピュータ上では
49という数値に変換される(アスキー文字)という認識でよろしいでしょうか。

Aベストアンサー

2進数で表したときの下4桁だけが残ることになるからです。

アスキーコードでは、数字の「1」は、10進で49、16進で31です。
16進の31を2進数に直すと、0011 0001です。
これと16進のOF、つまり2進の0000 1111と論理積をとると、0000 0001となり、数値の1になります。


人気Q&Aランキング

おすすめ情報