dポイントプレゼントキャンペーン実施中!

アセンブリ言語では、retとretfとはどういう事でしょうか?nearリターンとfarリターンの違いは何でしょうか?教えていただけないでしょうか?すみません。
で、
nearは現在のセグメント内で戻る。
farの方は、セグメントも復元して戻る。
の違いだと。
直訳するとセグメントは分割ですが、nearは現在の分割に戻る。farは、分割も復元して戻る。という意味になると思うのですが、どういう事でしょうか?差し支えなければ教えていただけないでしょうか?すみません。

A 回答 (5件)

結構詳しく解説されているサイトがありました。

ここにすべて答えが書いてあると思います。
https://www.felixcloutier.com/x86/ret
Descriptionのあたりにnear returnとfar returnに関する詳しい解説があります。

ここに書かれていることが理解できないのであれば、個々の事例について他人に回答させるよりも、その前知識をご自身の努力で自習された方がいいかもしれません。
    • good
    • 1

No4>なんかちっとも身についてない感じだなぁ。


https://oshiete.goo.ne.jp/qa/12417330.html
のNo2です。
No4さんと私も同感です。


No4>この補足で何を教えてほしいというのかわからない
No4>ってか私には伝わってないのでお答えできません

前回と同じ回答になりますが、
 インテルx86系のセグメントレジスタの役割
を質問者さんが理解しなことには、どなたも解説できないと思いますよ。
まずは、セグメントレジスタの役割を勉強してから、再度質問してみてください。
    • good
    • 1

>セグメントの番地0〜(65536×65536)までいけるということです。


>nearは、0〜65535までしかいかないということです。
>教えていただけないでしょうか?すみません。

なんかちっとも身についてない感じだなぁ。

>教えていただけないでしょうか?すみません。
この補足で何を教えてほしいというのかわからない
ってか私には伝わってないのでお答えできません
    • good
    • 2

>すみません


って最初に書く方がいいんじゃないの

最後だと「本文について」と取れます、つまり
過去の不備を詫びてるとは思えず、さっきまでの不備は無視なのか?
って読めますよ。
一見同じでも順序って大事ですよプログラムもそうです

>0〜65536以内
細かい揚げ足取りですが範囲が1コ多い。
このへんをおろそかにするとバグを生みます。

>farリターンはセグメントが関係ない
は?
far はセグメントレジスタも復帰(つまり更新する)と前回答したばかりだが?
なのに
>関係ない
わけないじゃんか
いったいどういう意味?
    • good
    • 0
この回答へのお礼

セグメントの番地0〜(65536×65536)までいけるということです。nearは、
0〜65535までしかいかないということです。教えていただけないでしょうか?すみません。

お礼日時:2021/06/20 04:25

アセンブリ言語は


CPUによって大いに違うのでCPUの種類を言わないと
正しい回答は無理です

質問文を読む限りインテル8086系だと思われるので
そうとして回答します

>nearは現在のセグメント内で戻る。
>farの方は、セグメントも復元して戻る。
>の違いだと。
その通りです。
スタックからレジスタに値を復帰するわけですが、
near は IP(Instruction Pinter)レジスタだけ、
far は CS(Code Segment)とIPレジスタの両方を
復帰します。
IPレジスタが復帰(つまり更新)されるので
リータン、つまり
サブルーチンをコールした元(の次)に戻ります。

セグメントとは
メモリーを用途によって分けた論理的領域です。
(基本的に)異なるセグメントにまたがるメモリアクセスを禁止する構造
なので、バグや悪意あるプログラムなどによるそういうアクセスを
防ぎます。

4個のセグメントレジスタは
その論理的な領域を物理アドレスに変換するためにあります。
    • good
    • 0
この回答へのお礼

で、nearリータンは、0〜65536以内にあって、farリターンはセグメントが関係ないというのは本当でしょうか?この解釈であっていますでしょうか?教えていただけないでしょうか?すみません。

お礼日時:2021/06/20 02:21

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