アセンブラを勉強しよ ..
655:デフォルトの名無しさん
09/01/17 12:28:58
>>653
当時はビットシフトも1つずつしかできなかった、という条件も必要では
656:デフォルトの名無しさん
09/01/17 12:34:36
それ以前に8ビットCPUだし
657:デフォルトの名無しさん
09/01/17 14:09:38
>>653
>必要があったのだが、入力を120回加算していてはただでさえ遅いCPUがますます遅くなる。
いや、それはCPUに対して失礼だ。CPUが遅くなるわけじゃないからな。
658:デフォルトの名無しさん
09/01/17 15:21:19
同じことをなんどもやらされるとうんざりして仕事をサボるCPUたん
659:デフォルトの名無しさん
09/01/17 16:00:29
LD H,A
LD L,0
SRL H
RR L ;HL = A*128
RLCA
RLCA
RLCA
LD E,A
LD D,0 ;DE = A*8
AND A ;CF=0
SBC HL,DE
RET
660:デフォルトの名無しさん
09/01/17 17:13:47
A>=32のときバグるじゃん>>659
LD L,A
LD H,0
ADD HL,HL
ADD HL,HL
ADD HL,HL
LD E,L
LD D,H ;DE = A*8
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL ;HL = A*128
AND A ;CF=0
SBC HL,DE
RET
661:デフォルトの名無しさん
09/01/17 18:42:27
mov ax,10 ; 初期値 511 迄対応
add ax,ax ; 2倍
add ax,ax ; 4倍
add ax,ax ; 8倍
mov dx,ax ; dx == 8倍
add ax,ax ; 16倍
add ax,ax ; 32倍
add ax,ax ; 64倍
add ax,ax ; 128倍
sub ax,dx ; 120倍
8086 に直すとこういうことか。
662:デフォルトの名無しさん
09/01/17 18:51:33
128倍してから8倍を引くと
128倍でオーバーフローするかもしんないぜ。
663:デフォルトの名無しさん
09/01/17 19:17:14
最大値が 546 と 511 の違いだね。
664:デフォルトの名無しさん
09/01/17 19:32:30
255 まででいいのなら
mov ah, al
shr ax, 1
で 128 倍できるぜ。
665:デフォルトの名無しさん
09/01/17 19:35:14
mov ah,al は 129 倍だ。
666:デフォルトの名無しさん
09/01/17 19:35:52
ちがう。257倍だった。
667:デフォルトの名無しさん
09/01/17 19:36:01
xor al, al を忘れてた
668:デフォルトの名無しさん
09/01/17 19:57:09
div/idiv 使わずに、ax を 10 で割ってください。ax==365 で 36 になればいいです。
669:デフォルトの名無しさん
09/01/17 19:59:21
cmp ax, 365
jne hoge
mov ax, 36
hoge:
670:デフォルトの名無しさん
09/01/17 20:01:10
かけ算は使っていいのか?
671:デフォルトの名無しさん
09/01/17 20:08:43
mul/imul も禁止
672:デフォルトの名無しさん
09/01/17 20:19:31
ついでに加減算も禁止。
673:デフォルトの名無しさん
09/01/17 20:22:20
ビット演算オンリーか。
674:デフォルトの名無しさん
09/01/18 00:04:24
誰か答え書いてよ
寝れないじゃないの
675:デフォルトの名無しさん
09/01/18 00:08:02
流石に加減算を禁止されては・・・
676:デフォルトの名無しさん
09/01/18 00:25:05
full adder を論理演算で作るんだ
677:デフォルトの名無しさん
09/01/18 12:37:05
>>653
> 二乗を求めるために、わざわざ級数の総和をループで計算することに何の意味があるんだ。
> 作った奴の頭の悪さ、自己顕示欲の強さがまる見えだ。
> こんな手法が必要になる状況なんて西暦5000年になっても来ないに決まってる。
ループのプログラムの例題として、ふつーこんな求め方しねーだろwwww なものを
使うのはよくあると思うぞ。まぁそうでないものを例に使う方がいいとは思うが。
678:デフォルトの名無しさん
09/01/18 16:26:20
突然えらく伸びててびっくりした
679:デフォルトの名無しさん
09/01/20 01:18:01
mov ax,365
xor dx,dx
@@:
cmp ax,10
jb @f
sub ax,10
inc dx
jmp @b
@@:
xchg ax,dx
これでいいの?識者の方デバッグして
さすがに加減算はいるよ。
680:デフォルトの名無しさん
09/01/21 01:32:01
URLリンク(hp.vector.co.jp)
27.2 除算 参照
681:デフォルトの名無しさん
09/01/21 11:38:29
bush obama
682:デフォルトの名無しさん
09/01/26 00:59:10
いらない報告を
この前手取り足取り教えていただいた兄です
愚妹から100パーではないけど意味がわかったおかげでそれなりに解けたと連絡が来ました
本当ありがとうございました
683:デフォルトの名無しさん
09/02/07 12:37:36
LD命令とMOV命令があって楽しい
時々CASLも書いてある
684:デフォルトの名無しさん
09/02/08 02:28:33
x86に下限0上限100の飽和演算ができるSIMD命令はありますか?
685:,,・´∀`・,,)っ-●◎○
09/02/08 04:57:41
paddusb/psubusbを使えば0下限255上限で飽和処理をしてくれる。
更にpminubを使って100との比較をし、上限100に切ればいい。
686:デフォルトの名無しさん
09/02/08 05:12:37
それやったらものすごく結果が変わってしまうと思うが。
687:,,・´∀`・,,)っ-●◎○
09/02/08 05:26:49
お前は何を言ってるんだ
688: ◆0uxK91AxII
09/02/08 05:27:01
>>684
無い。
>>686
ないわ。
689:,,・´∀`・,,)っ-●◎○
09/02/08 05:36:50
0−100の飽和って何に使うのかさっぱりわからんが
690:デフォルトの名無しさん
09/02/08 05:58:03
上限下限のチェックするのがめんどくさいだけなんじゃない?
691:デフォルトの名無しさん
09/02/08 06:12:42
足してから毎回101で割るとか(w
692:デフォルトの名無しさん
09/02/08 12:49:04
確率計算かね
693:デフォルトの名無しさん
09/02/08 14:47:06
やはり命令一発では無いですか。>>685をやってみます。ありがとうございました。
やりたいのはADPCMデコードの高速化でした。
694:デフォルトの名無しさん
09/02/08 15:05:07
数MHzの8bitCPUでADPCMいじってる俺からすりゃものすごい贅沢だよ…
695: ◆0uxK91AxII
09/02/08 17:06:52
ADPCMでSIMDを使うっていうのが、イミフメ。
696:デフォルトの名無しさん
09/02/08 19:14:49
イミフメの理由がイミフメ
697:デフォルトの名無しさん
09/02/10 00:08:01
MS-DOS 5/6 あたりで実行できる16BITバイナリが作成できる、フリーのCコンパイラで良いのありませんか?
今もっている MS-C 6 は、PC-98 用なので、x87 命令の関係で PC/AT では難があるのです。
MASM で作った関数がかなりたくさんあるので、できれば、MS-C 互換のものが良いです。
698:デフォルトの名無しさん
09/02/10 00:10:23
>>697
つdebug
ただしcom専用w
699:デフォルトの名無しさん
09/02/10 00:12:09
OpenWatcom C++
スレリンク(tech板)l50
700:デフォルトの名無しさん
09/02/10 02:53:32
URLリンク(dn.codegear.com)
701:デフォルトの名無しさん
09/02/10 03:03:50
今はobjdumpしか使ってないんだけど、
もっと本格的に解析できるのはなんかある?
フリー&&オープンで。
702:デフォルトの名無しさん
09/02/10 06:35:43
>>697
gccとNASMの組み合わせじゃダメ?
DOS用にリンカスクリプトとcrt書けばx86向けの奴でいけたはず。
703:デフォルトの名無しさん
09/02/10 11:58:54
>>697
このスレ的な解法を提示すると
emoem.asm をいじればIBM-AT互換機用にできる。
704:デフォルトの名無しさん
09/02/20 06:26:06
エスパーよろしく!!
705:デフォルトの名無しさん
09/02/20 07:03:41
URLリンク(ishizuka.net)
706:デフォルトの名無しさん
09/02/20 08:47:31
>>668
axを25.6倍してから、256で割る(>>8する)。といいたいけど、ちと誤差が多いので、
51倍(≒25.6×2)してから、512で割る(>>9する)。オーバーフローに注意。
掛け算も禁止なら、左シフトと加算で臨機応変に。
って、いまさらだれも見とらんか。。。
707:デフォルトの名無しさん
09/02/21 00:00:23
680でもう出てる気がする
708:デフォルトの名無しさん
09/02/21 04:46:57
1010bで割るのに特化した書き方できないかな。除算ループの中を2回だけ、みたいな。
709:708
09/02/21 15:51:07
「5で割る」 演算ができればいいんだ。/4と/1(=元の数)を引く演算ができないかな。
710:デフォルトの名無しさん
09/02/21 23:44:54
>>708-709
URLリンク(www.amazon.co.jp)
711:デフォルトの名無しさん
09/02/22 00:44:44
読み始めてから分かったのだけど『Assembly language step-by-step』って出版されたのは2000年だけど執筆されたのはWindows NTの時代。
最近の話題で覚えた方が良いよってのがあったら教えてください。
(それにしてもアセンブリ言語関係は最近の和書が少ないですね)
712:デフォルトの名無しさん
09/02/22 03:02:11
>>710 Not found になっちゃう。
713:デフォルトの名無しさん
09/02/23 09:45:38
>>712。この本
ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか
714:
09/02/25 21:36:57
MASMで勉強始めました。
pushに即値をオペランドとして渡すことはできないのですか?
インテルのIA32のマニュアルでpushの項目に
6A PUSH imm8 imm8をプッシュする
と書いてあるのでできそうに思えるのですが
たんにpush 08H
とかしてもエラーになります。
型がわからないからエラーになるのか、それとも即値ではいけないのでしょうか?
715:デフォルトの名無しさん
09/02/25 21:44:37
今は即値pushできるはずだけど、
16bit時代はできなかったと思う。
716:デフォルトの名無しさん
09/02/25 21:44:54
先頭に .186って書け
717:
09/02/25 22:02:37
>>715
MSDOSの16bit用のを書いてました。
でも
>>716さんの言うとおりするとできました。
.186ってことは8086じゃできなかったけど80186からできるようになったということですね。
ありがとうございました。
718:
09/02/25 22:16:46
でもバイトの即値をpushしてもスタックにつまれるのはワードで、popもバイトのレジスタへのはないんですね。
まあ目的もなしに勉強してるだけだから困るわけじゃないけど。
719:
09/02/26 02:08:02
16ビットMSDOS用のアセンブラをコンパイルしてXDAっていうやつで逆アセンブルすると
ヘッダの情報のところに
Relocation data = Offset:x001E, size:x0004
ってあるんですけど、これは何を意味してるんですか?
Offset:x001EはIMAGE_DOS_HEADER構造体のe_lfarlcの値らしいのですが
最初のリロケーション項目のオフセットっとかいう説明を読んでも、どういう意味を持つのかわかりません。
720:デフォルトの名無しさん
09/02/26 02:48:46
>>719
ローディング時に値を設定する必要があるセグメントアドレスへのポインタリストのファイル内オフセット。
セグメントアドレスの個数はe_crlc。
かな?
721:デフォルトの名無しさん
09/02/26 03:01:45
16ビットアドレスを使っているところはセグメントレジスタのセグメントアドレスと+して物理アドレス
とする。プログラムのなかでセグメントアドレスを使用している部分。このセグメントアドレスは
ローディング時に値が決まるのでローダーが値を書き換えて上げなければならない。
その値を書き換えるべき対象のポインターリストが「リロケーション項目」。
722:
09/02/26 08:51:17
>>720 >>721
どうもありがとうございます。
1Eとあったということは、ファイルの先頭から1Eバイト目を指しているということで
そこを見ると07とありました。
ファイルの先頭から1Eバイト目には、IMAGE_DOS_HEADER構造体のフィールド e_res[4];// Reserved wordsがくるはずで
予約領域で常に0に設定されてるとか解説してるWebページをみましたが、
自分のプログラムをコンパイルした結果は値が設定されてるのはなぜかと思ってましたが、この値なのですね。
link16でリンクしたからその結果なのでしょうか。他のプログラムは1Eじゃなく40がほとんどでした。
で、そこにある値07の意味なのですが、自分の書いたコードがマシン語になった7バイト目は
mov ax,dsegという命令のdsegにあたる部分で、DSの値がくるはずのバイトでした。
ここをさしていると考えていいみたいですね。たしかにロードされた場合、そこは実際のDSの値に書き換えなくちゃいけませんからね。
723:
09/02/26 08:59:39
実際のDSの値 ではなく 実際にDSに設定する値
と表現するべきでしたね。
724:
09/02/26 09:02:51
assume cs:cseg,ds:dseg,ss:sseg としてましたから。
725:デフォルトの名無しさん
09/02/26 18:34:04
BIOSのシステムコールの0x18が使い方わからん・・
教えてくれ
726:デフォルトの名無しさん
09/02/26 19:24:23
int 18h ってなんだっけ?
というかこれ見ると、
URLリンク(www.ctyme.com)
GUS のドライバとか DISKLESS BOOT HOOK とか
今普通使いそうにない機能ばっか。
もしかして98?
727:デフォルトの名無しさん
09/02/26 19:29:58
いや、OS作ってるんだけどさ
0x18で確か・・周辺機器リストの取得だったはず
728:デフォルトの名無しさん
09/02/26 20:07:21
URLリンク(www.ctyme.com)
これかな?
729:デフォルトの名無しさん
09/02/26 21:21:11
ビットフィールドってどうやって取得すればいいんだ?
730:デフォルトの名無しさん
09/02/26 23:24:07
>>729
and
731:デフォルトの名無しさん
09/02/26 23:56:46
してシフト
732:デフォルトの名無しさん
09/02/27 00:02:17
分岐に使うのか演算に使うのか
733:デフォルトの名無しさん
09/02/27 00:04:28
>>729
目隠しして手探りで一つずつ選んでいく
734:デフォルトの名無しさん
09/02/27 00:10:21
>>729
LSB 側にフィールド位置だけよせて, フィールドサイズの 1 のビットを
積めたもので and を取れと言われてるんだが, この説明で分かるか?
735:デフォルトの名無しさん
09/02/27 10:10:53
>>728
検索してみると、INT18 Device ってのもあるらしいんだが...
ネットワークブート?
736: ◆0uxK91AxII
09/02/27 14:11:21
>>725
どの機器のBIOSかを、明示せよ。
737:デフォルトの名無しさん
09/02/27 16:32:10
スマソ・・0x18じゃなくて0x11だった・・
>>726氏が教えてくれたのがビンゴ
ここにある↓
URLリンク(www.ctyme.com)
この中の「Bitfields for BIOS equipment list:」ってやつはわかるんだが
このビットの取得方法が分からん・・・
738:デフォルトの名無しさん
09/02/27 16:48:56
まちがえた
>>728氏だった
739:デフォルトの名無しさん
09/02/27 18:55:27
URLリンク(community.osdev.info)(AT)BIOS
740:大和魂 ◆TLCPn.jaa2
09/02/27 22:41:48
質問です。ちょっと長いので2分割しますが、すいません。
PC-9801/PC-9821上のNASM 2.06rc1で組んでますが、より効率の良いコードを
考えていて、詰まりました。Cだとif〜elseでイケますが、アセンブラの場合、
共通のルーチンがある場合、どうしたらいいでしょうか。
単純にjmpすればいいのでしょうか?ただ、それだと若干メモリとかコードが
大きくなってしまうような気がします。要点は、
1)mov ax,4c00h int 21hのDOSコールが2箇所ある。無駄すぎ。
2)mov ah, 9 int 21hのDOSコールが2箇所ある。やはり無駄っぽい。
3)messageの中身は、実際は数値の違いだけ(2MHzか2.5MHzか)。これを
集約できないか。なんとかできないでしょうか。以下、例示します。
PC-9801/9821用 SysClk.asm ; システムクロックを取得する
(タイマIC 8253Aより) NASM 2.06rc1用コード
; PC-9801 system clock diagnostic program
; tested on PC-9821Xa7e(430FX)/PC-9801DA2
;
; Programmed by Yamato_Damashii 2009-02-27 for NASM 2.06rc1
[Bits 16]
org 100h ; COM program
start:
push es
xor ax, ax
mov es, ax
;-------------------------------------------
; 0000:0501h = BIOS_FLAG
; bit 7 = System Clock
; if bit 7 = 0, then system clock is 2.5MHz
; if bit 7 = 1, then system clock is 2MHz
;-------------------------------------------
test byte [es:0501h], 80h ; hex 80h = byte 10000000
pop es
jz sysclk_is_2_5MHz
741:大和魂 ◆TLCPn.jaa2
09/02/27 22:42:34
続き
sysclk_is_2MHz:
mov ah, 9
mov dx, message_2MHz
int 21h
mov ax, 4c00h
int 21h
sysclk_is_2_5MHz:
mov ah, 9
mov dx, message_2_5MHz
int 21h
mov ax, 4c00h
int 21h
message_2MHz:
db 'System clock is 2MHz', 0dh, 0ah, '$'
message_2_5MHz:
db 'System clock is 2.5MHz', 0dh, 0ah, '$'
742:デフォルトの名無しさん
09/02/27 23:01:28
>>740
普通に
call
じゃだめなの?
743:デフォルトの名無しさん
09/02/27 23:23:09
うーむ・・さっぱりだ
744:デフォルトの名無しさん
09/02/27 23:48:55
>>740
これでいいんじゃないかと
test byte [es:0501h], 80h
pop es
jz sysclk_is_2_5MHz
mov dx, message_2MHz
jmp print_sysclk
sysclk_is_2_5MHz:
mov dx, message_2_5MHz
print sysclk:
mov ah, 9
int 21h
mov ax, 4c00h
int 21h
745:大和魂 ◆TLCPn.jaa2
09/02/28 00:20:28
>>744
ありがとうございます。ご提示の案、検討してみます。
>>742
callでも検討を考えていました。コードが若干複雑になる可能性がありますが、
(僕の頭が単細胞…(^^;)、call〜retでサブルーチン可してしまう案ですよね。
ありがとうございました。
がんばります。次はサウンドBIOSの有無のチェックや内蔵固定ディスクの切り離しの有無の
チェックプログラムのコードに取り掛かります。
746:デフォルトの名無しさん
09/02/28 02:24:17
たかだかそれくらいならcallする方が無駄な気がするぞ。時間とか電力とか。
俺ならマクロで書いてしまう。
NASMって知らないんだけどマクロアセンブラじゃないの?
ならm4なりcppなりのマクロプロセッサをかますとか。
747:大和魂 ◆TLCPn.jaa2
09/02/28 03:18:01
>>746
NASMはもちろん、マクロアセンブラですよ。オープンソースです。
ZSNESとかはCとNASMで書かれてます…。
ただ確かに、超小規模なんで、call〜retは無駄すぎますね。
実はNASMでのCOMコードをようよう書けるようになった程度なんで、
まだNASMの実装する膨大なマクロ機能などはMANUAL未読部分で、
org 100h〜mov ax, 4c00h int 21hで小さなチェッカツールを作るのが
関の山で。精進します。
748:デフォルトの名無しさん
09/02/28 07:38:30
なんでNASMの解説してくれてるんだろうか
749:デフォルトの名無しさん
09/03/01 17:06:10
クラスタサイズ以下にしてもあまり意味がないと思うけど、それはおいといて
esを保存する必要はないし、最後はretでいいと思う
750:デフォルトの名無しさん
09/03/23 10:34:10
athlon64用のコードを逆アセンブルするとでてくるnopwとかretqって何でしょうか?
amdのサイトにあるamd64のインストラクションセットマニュアルには載ってませんでした
751:デフォルトの名無しさん
09/03/23 11:19:43
>>750
なにで逆アセしてるの?
752:750
09/03/23 11:33:22
>>751
objdump -Sです
753:デフォルトの名無しさん
09/03/23 16:40:16
AT&T形式のアセンブラだとニーモニックの後ろにオペランドサイズがつくって話か?
754:デフォルトの名無しさん
09/03/23 16:57:38
long NOPの一種だと思うが該当部分のオペコードが無いと判断できない
755:デフォルトの名無しさん
09/03/23 19:50:07
名前からして
nopw:nopのWORD
retq:retのQ?
だな。qってなんだろ?
756:デフォルトの名無しさん
09/03/23 19:52:56
quad じゃね?
757:デフォルトの名無しさん
09/03/27 18:41:15
qwordだろ
758:デフォルトの名無しさん
09/03/29 02:30:32
環境:MASM 9.0
以下のコメントアウトされたプロトタイプで
最初の2つはOKだが3つめは何故エラーになるのでしょうか
error A2008: syntax error : title
;func proto STDCALL , :dword , :dword
;func proto STDCALL , message:dword , :dword
;func proto STDCALL , message:dword , title:dword
.code
func proc mes : dword , tit : dword
invoke MessageBoxA , NULL , mes , tit , MB_OK
ret
func endp
他2つではちゃんと実行出来ます
リファレンスには
label PROTO [[distance]] [[langtype]] [[, [[parameter]]:tag]]...
とあるのでどれでも動きそうに思うのですが
759:デフォルトの名無しさん
09/03/29 03:34:44
予約語
760:デフォルトの名無しさん
09/03/29 09:05:44
>>759
解決しました。ありがとうございます!
761:デフォルトの名無しさん
09/04/02 13:46:59
>>725 なんの機種かわからんが古いのならROM BASICだったような。
762:デフォルトの名無しさん
09/04/03 05:16:27
質問させてください
以下参考にHelloWorldが動くところまで出来ました
URLリンク(www.masm32.com)
しかし、printfのために色々インクルードされてて自作感があまりないです
print関数をもっとシンプルにCPUの機能(dosのint 21hみたいな感じ)で
実現することって出来るんでしょうか?
(それともint 21h自体も何かの機能で実現されている?)
まずは1文字だけでもいいので表示したいのですが
例えばこんな感じのことは出来ますか?
.386
.model flat,stdcall
.data
msg db "hello world",13,10,"$"
.code
start:
mov dx,offset msg
mov ah,9
int 21h
end start
(書き込み規制中で代行お願いしてます)
763:デフォルトの名無しさん
09/04/03 09:51:19
>>762
WindowsのDOS互換機能で実行してるなら、DOSのファンクションが実行できる
はずだからやってみたら?
INT 21hがなんなのか知りたければ、CPUとOSの勉強をしてください。
いずれにしても、そういう低水準のことを希望するなら使ってるプラットフォームに
ついて調査することは基本。どういうシステムの上での話か説明できていない点で、
その質問のしかたからしてダメダメです。
764:デフォルトの名無しさん
09/04/03 10:06:05
インクルードファイルを辿って行けば?
765:デフォルトの名無しさん
09/04/03 14:46:42
878 :Classical名無しさん :09/04/02 23:54 ID:31nUMIMQ
お願いします。
【URL】スレリンク(tech板)
【名前欄】
【メール欄】sage
【本文】↓
質問させてください
以下参考にHelloWorldが動くところまで出来ました
しかし、printfのために色々インクルードされてて自作感があまりないです
print関数をもっとシンプルにCPUの機能(dosのint 21hみたいな感じ)で
実現することって出来るんでしょうか?
(それともint 21h自体も何かの機能で実現されている?)
まずは1文字だけでもいいので表示したいのですが
例えばこんな感じのことは出来ますか?
.386
.model flat,stdcall
.data
msg db "hello world",13,10,"$"
.code
start:
mov dx,offset msg
mov ah,9
int 21h
end start
766:デフォルトの名無しさん
09/04/03 14:51:57
暇人乙
767:デフォルトの名無しさん
09/04/03 15:09:08
マジキチ
768: ◆0uxK91AxII
09/04/03 16:38:37
下手の考え休むに似たり。
769:デフォルトの名無しさん
09/04/03 17:46:17
それはつまるところテキストVRAMに書くんだよというような話を聞きたい人なのかな。
770:デフォルトの名無しさん
09/04/03 19:37:00
>>762
dumpコマンドで文字列表示
URLリンク(wisdom.sakura.ne.jp)
本でオススメは
アセンブリ言語の教科書
771:762
09/04/04 10:47:59
色々ありがとうございます。すみません、環境も書きます
WinXP/Pentium Dual-Core E2180/AMIBIOS(2006)
まず、最終目標はOS作成(動作原理が知りたい)です
(なので、DOSにも頼らない方向にしたい)
あれから、int 21HもCPUの機能ではなくて
OS側の機能ということがわかりました。
URLリンク(7ujm.net)
そこで、BIOSを使えば文字が表示出来ると思いましたが
以下コード、Win環境では実行すると例外が出ます
〜略
mov ah,0eh
mov al,61h
mov bh,0
mov bl,1
int 10h
このコード、ブート直後ならいざ知らず、
Win起動後はOSの保護で例外がでると
推測したのですがあってますでしょうか?
Winのcmd.exeで試行錯誤しながらOS作って、
それでいつかブートするのが理想なんですが
BIOSが直接たたけないとなると次はエミュですかね・・
772:デフォルトの名無しさん
09/04/04 10:55:32
>>771
フリーのdos使えば?
773:代理
09/04/04 11:10:26
>>771 70 :Classical名無しさん :09/04/03 22:55 ID:M4Y7rn8Y
荒らし対策になるか、ちょっとテストもかねて
これでお願いできますでしょうか。
ゆあるえる スレリンク(tech板)
なまえ 762
めーる sage
ほんぶん
色々ありがとうございます。すみません、環境も書きます
まず、最終目標はOS作成(動作原理が知りたい)です
(なので、DOSにも頼らない方向にしたい)
あれから、int 21HもCPUの機能ではなくて
OS側の機能ということがわかりました。
そこで、BIOSを使えば文字が表示出来ると思いましたが
以下コード、Win環境では実行すると例外が出ます
〜略
mov ah,0eh
mov al,61h
mov bh,0
mov bl,1
int 10h
このコード、ブート直後ならいざ知らず、
Win起動後はOSの保護で例外がでると
推測したのですがあってますでしょうか?
Winのcmd.exeで試行錯誤しながらOS作って、
それでいつかブートするのが理想なんですが
BIOSが直接たたけないとなると次はエミュですかね・・
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5401日前に更新/195 KB
担当:undef