質問編集履歴
1
編集
title
CHANGED
File without changes
|
body
CHANGED
@@ -8,4 +8,121 @@
|
|
8
8
|
ただ、アセンブリ言語を使っている方が使っているCPUのハードを理解してからアセンブリ言語を使うのか、C言語をアセンブリ言語の出力にしてCPUの動作などから構造を把握して、アセンブリ言語でプログラムを作っているのか気になりました。
|
9
9
|
そしてどちらにしてもなぜアセンブリ言語を使っているのか教えていただけると勉強になります。
|
10
10
|
|
11
|
-
もしかしたら編集などして質問が増えたりするかもしれませんがどうかよろしくお願いいたします。
|
11
|
+
もしかしたら編集などして質問が増えたりするかもしれませんがどうかよろしくお願いいたします。
|
12
|
+
|
13
|
+
(編集した内容です)
|
14
|
+
```
|
15
|
+
(NASMで作成)
|
16
|
+
|
17
|
+
; ----- スタート(ファイル読込)
|
18
|
+
ASSEMBLE:
|
19
|
+
ORG 0X0100 ; セグメント指定
|
20
|
+
MOV AX,0X3D00 ; AH:0X3D->ファイルオープン、AL:0X00->読込指定
|
21
|
+
MOV DX,FILENAME ; DX:ファイルパスのメモリアドレス
|
22
|
+
INT 0X21 ; システムコール(戻り値:AX->ファイルハンドル)
|
23
|
+
JC ASM_END ; 読込失敗
|
24
|
+
; ----- 読込成功
|
25
|
+
FILE_OK
|
26
|
+
MOV SI,AX ; ファイルハンドル保存
|
27
|
+
MOV BX,AX ; ファイルハンドル
|
28
|
+
MOV AX,0X3F00 ; AH:0X3F->読込
|
29
|
+
MOV CX,64-1 ; CX:読込バイト数
|
30
|
+
MOV DX,BUFFER ; 読込データ展開番地
|
31
|
+
INT 0X21 ; システムコール(戻り値:AX->実際に読み込んだバイト数)
|
32
|
+
; ----- 終了
|
33
|
+
ASM_END:
|
34
|
+
MOV AH,0X3E ; AH:0X3E->ファイルクローズ
|
35
|
+
MOV BX,SI ; ファイルハンドル
|
36
|
+
INT 0X21 ; システムコール(戻り値なし)
|
37
|
+
MOV AH,0X4C ; AH:0X4C->プログラム終了
|
38
|
+
INT 0X21 ; システムコール(戻り値なし)
|
39
|
+
; ----- メモリ
|
40
|
+
FILENAME:
|
41
|
+
DB 'TEXT.TXT' ; ファイルパス
|
42
|
+
BUFFER:
|
43
|
+
RESB 64 ; メモリ確保
|
44
|
+
***** ***** ***** ***** *****
|
45
|
+
; ----- スタート(ファイル書込)
|
46
|
+
ASSEMBLE:
|
47
|
+
ORG 0X0100 ; セグメント指定
|
48
|
+
MOV AX,0X3D01 ; AH:0X3D->ファイルオープン、AL:0X01->書込指定
|
49
|
+
MOV DX,FILENAME ; DX:ファイルパスのメモリアドレス
|
50
|
+
INT 0X21 ; システムコール(戻り値:AX->ファイルハンドル)
|
51
|
+
JC ASM_END ; 読込失敗
|
52
|
+
; ----- 書込成功
|
53
|
+
FILE_OK
|
54
|
+
PUSH AX ; ファイルハンドル待避
|
55
|
+
MOV BYTE[BUFFER],0X41 ; [ A ]と出力
|
56
|
+
POP BX ; ファイルハンドル回帰
|
57
|
+
MOV AX,0X4000 ; AH:0X40->ファイル書込
|
58
|
+
MOV CX,0X01 ; 書込バイト数
|
59
|
+
MOV DX,BUFFER ; 書込データの番地
|
60
|
+
INT 0X21 ; システムコール(戻り値:AX->書込バイト数)
|
61
|
+
; ----- 終了
|
62
|
+
ASM_END:
|
63
|
+
MOV AH,0X3E ; AH:0X3E->ファイルクローズ
|
64
|
+
MOV BX,SI ; ファイルハンドル
|
65
|
+
INT 0X21 ; システムコール(戻り値:なし)
|
66
|
+
MOV AH,0X4C ; AH:0X4C->プログラム終了
|
67
|
+
INT 0X21 ; システムコール(戻り値:なし)
|
68
|
+
; ----- メモリ
|
69
|
+
FILENAME:
|
70
|
+
DB 'TEXT.TXT' ; ファイルパス
|
71
|
+
BUFFER:
|
72
|
+
RESB 64 ; メモリ確保
|
73
|
+
***** ***** ***** ***** *****
|
74
|
+
; ----- スタート(ファイル作成)
|
75
|
+
ASSEMBLE:
|
76
|
+
ORG 0X0100 ; セグメント指定
|
77
|
+
MOV AH,0X3C ; AH:ファイル作成時→0X3C:ファイル上書、0X5B:エラー
|
78
|
+
MOV DX,FILENAME ; DX:ファイルパスのメモリアドレス
|
79
|
+
MOV CX,0X0000 ; CX:0X0000->通常ファイルの作成、0X0001->読込専用ファイルの作成
|
80
|
+
INT 0X21 ; システムコール(戻り値:なし)
|
81
|
+
JC ASM_END ; 作成失敗
|
82
|
+
|
83
|
+
; ----- 作成成功
|
84
|
+
FILE_OK
|
85
|
+
; ----- 終了
|
86
|
+
ASM_END:
|
87
|
+
MOV AH,0X3E ; AH:0X3E->ファイルクローズ
|
88
|
+
MOV BX,0X00 ; 初期化
|
89
|
+
INT 0X21 ; システムコール(戻り値:なし)
|
90
|
+
MOV AH,0X4C ; AH:4C->プログラム終了
|
91
|
+
INT 0X21 ; システムコール(戻り値:なし)
|
92
|
+
; ----- メモリ
|
93
|
+
FILENAME:
|
94
|
+
DB 'TEXT_NEW.TXT' ; ファイルパス
|
95
|
+
***** ***** ***** ***** *****
|
96
|
+
; ----- スタート(ファイル削除)
|
97
|
+
ASSEMBLE:
|
98
|
+
ORG 0X0100 ; セグメント指定
|
99
|
+
MOV AH,0X41 ; AH:ファイル削除指定
|
100
|
+
MOV DX,FILENAME ; DX:ファイルパスのメモリアドレス
|
101
|
+
INT 0X21 ; システムコール(戻り値:なし)
|
102
|
+
JC ASM_END ; 削除失敗
|
103
|
+
; ----- 削除成功
|
104
|
+
FILE_OK
|
105
|
+
; ----- 終了
|
106
|
+
ASM_END:
|
107
|
+
MOV AH,0X3E ; AH:0X3E->ファイルクローズ
|
108
|
+
MOV BX,0X00 ; 初期化
|
109
|
+
INT 0X21 ; システムコール(戻り値:なし)
|
110
|
+
MOV AH,0X4C ; AH:4C->プログラム終了
|
111
|
+
INT 0X21 ; システムコール(戻り値:なし)
|
112
|
+
; ----- メモリ
|
113
|
+
FILENAME:
|
114
|
+
DB 'TEXT_DEL.TXT' ; ファイルパス
|
115
|
+
```
|
116
|
+
ちなみに、載せましたファイルを開くアセンブリ言語プログラムは使うCPUの構造をレジスタや細かいレベル(演算回路にデータをおくるレジスタなど、文字を表示するためのデータを送るレジスタなど)まで理解して作ったのですか?
|
117
|
+
|
118
|
+
だとしたら、何をもとに使っているCPUの内部構造を把握したのでしょう
|
119
|
+
|
120
|
+
か?
|
121
|
+
|
122
|
+
個人的にはアセンブリ言語はCPUに依存するため使うCPUの構造を詳しく知らないとプログラム自体組めない様にも思えます。
|
123
|
+
|
124
|
+
|
125
|
+
|
126
|
+
また、質問とは真逆にアセンブリプログラムからわからない情報は何かありますか?
|
127
|
+
|
128
|
+
編集後で申し訳ありませんがどうかよろしくお願いいたします。
|