2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

8086アセンブラで会話しよう。

1 :MASM:01/12/16 01:40.net
XOR AX, AX

96 :ナイコンさん:02/01/12 22:40.net
こういうスレがあると嬉しくなります
いろいろと勉強になります

うれしage!

97 :ナイコンさん:02/01/12 23:30.net
>>95
うわっ、PowerPCでメシ食ってる俺が86厨房とか言われてるよー。
ひょっとして煽られてるのかもしれないけどマジレス。

PowerPCの資料見ればわかるんだけど、SR0〜15っちゅーレジスタが
あったりします。さて、この「SR」とは何の略でしょう?
モトローラのWebサイトから英語版はダウンロードできると思うんで
読んでみてください>>95

英文が読めなければ、ソフトバンクの「Inside PowerPC」のP71〜72他を
読むといいかな。この本はPowerPC初心者向けにとてもいいと思う。
(他にないってのもあるけど)

セグメントといえば有名な64KBの壁を想像される方が多いのですが、
PowerPCの「セグメント」は80x86みたいな難儀なもんではありません。
私が>>94での書き方もまずかったと思うけど、
「セグメントという言葉=80x86の64KB=邪悪」っていう誤解は
とっとと捨てていただきたいと思う。

98 :>>97:02/01/12 23:34.net
Status Register?

99 :>>97:02/01/12 23:36.net
Segment Register?

100 :>>97:02/01/12 23:36.net
Static Register

101 :x86厨 ◆xK91AxII :02/01/12 23:58.net
;>>97
;http://www-3.ibm.com/chips/products/powerpc/newsletter/v1_oct2000/prog-h-t_10-00.html
;http://www-3.ibm.com/chips/techlib/techlib.nsf/productfamilies/PowerPC
;英文読めても、この辺は理解しづらいところではないかと。

102 :95:02/01/13 06:58.net
>>97
申し訳ありません。ご存知の通り、知ったかぶりの多い2chですから、
貴方が自分の言っている事を理解しているのか測るために本当っぽい
嘘で煽ってみました。マジゴメン。
PPCが発表された時、4GBのメモリ空間って話題になったから嘘のネタには
もってこいだったのですよ。
ちなみに補足するとSRの略は>>99が正解。CPUと言うよりかは内臓MMUの
レジスタで、仮想RAM管理用のレジスタです。普通の人は触りません。
セグメント誤解の件もかなり同意。つーか86厨房が全部悪い。

103 :昔86er:02/01/13 08:16.net
db '7777・・・'
 ↓ 逆アセすると
 AAA
 AAA
 AAA
 AAA
 ・
 ・
 ・

覚えやすく見つけやすいので、パッチエリアを埋めておく
のに愛用していた。

104 :ナイコンさん:02/01/18 12:50.net
JMP FAR FFFF:0000


105 : ◆xK91AxII :02/01/19 20:49.net
OFSDLT EQU 7c00H
_OFS DW 0
_SEG DW 1000H
;中略
jmp DWORD PTR [_OFS + OFSDLT]
;この前書いたプログラムから抜粋

106 :ナイコンさん:02/01/19 20:52.net
>>104リセットだか?

107 :ナイコンさん:02/01/19 21:51.net
>>97
>PowerPCの「セグメント」は80x86みたいな難儀なもんではありません。
80386以降と80286と8086を一緒にする辺りがドキュソの証

108 :97:02/01/19 22:02.net
>>107
おお、すみません。
80x86のリアルモード、と書くべきでしたね。

プロテクトモードでは「セグメントレジスタ」じゃなくて
「セグメントセレクタ」になりますね。
で、そのセグメントセレクタの数以上のセグメントをアクセスしようとすると
結局セレクタを切り替えないといかんという・・・。
まあ64KBまでとかいうアホな制限ないから、そんなに問題にはなりませんが。
メモリまわりのの制約については、286の場合は16MBまで&FS/GSがないくらいだったよーな。
さすがに忘れてきてるなあ。どうでしたっけ?>>107

今はPPCでメシ食ってますが、その前は特定用途向けのDOS Extenderとか
作ってました。動くまではちょっと大変だったけど、慣れるとリアルモード
より楽だったなー。もうOSに近い領域の仕事することはないだろうな。


109 : ◆xK91AxII :02/01/19 22:14.net
>>108
セレクタを切り替えてこそ、プロテクト...。

110 :97:02/01/19 22:53.net
>>109
色々ありまして、dsとesを開けときたかったんですよ。
286でも動くようにしないと売れないから386以降のみは不可
とかも言われたり・・・。


111 :ナイコンさん:02/01/21 09:23.net
TurboAssemblerで
SHORTジャンプとNEARジャンプを
自動判別する機能に萎。
SHORTでもダミーのNOPを入れるだけで
結局3バイト掛かる。


112 :ナイコンさん:02/01/22 12:40.net
>>111
1パスじゃなければちゃんとnopなしになると思われ。

113 :ナイコンさん:02/01/22 20:28.net
がぶ飲みしたいときー。
00 00 の逆アセンブルが
ADD [BX+SI],AL
だったとき。


114 :ナイコンさん:02/01/22 20:30.net
Windows2000のDEBUGコマンド、
未だに8086仕様とは…


115 :ナイコンさん:02/01/23 00:43.net
XOR AX,AX
MOV DI,AX
PUSH AX
POP ES
MOV CX,512
REP STOSW

116 : :02/01/28 01:58.net
movem d0-d6,(-a7)

117 :ナイコンさん:02/02/14 19:40.net
MOV EAX,DWORD PTR [MSG_NO]
INC EAX
MOV DWORD PTR [MSG_NO],EAX

118 :ナイコンさん:02/03/18 11:24.net
xor eax,ebx
xor ebx,eax
xor eax,ebx

119 :ナイコンさん:02/03/18 22:59.net
xor ax,ax ; 腹減った

120 :ナイコンさん:02/03/19 00:36.net
8086で32bitかい?

121 :ナイコンさん:02/04/16 02:11.net
PRINT MACRO MSG
  MOV AH,9
  MOV DX,OFFSET MSG
  INT 21H
  ENDM

122 :まじめに。:02/05/10 23:57.net
popall macro
push bp
mov bp,sp
pushf
push ax
push bx
push cx
push dx
push di
push si
push ds
push es
endm


123 :122:02/05/11 00:01.net
大歩危でした。pushall(改)が正解

124 :再開:02/05/28 01:08.net
    even
_print label  far
    pusha


125 :ナイコンさん:02/09/18 11:20.net
 

126 :ナイコンさん:02/09/18 12:29.net
retx

127 :ナイコンさん:02/09/26 22:59.net
jmp short $+2 ; 人生無理せず逝こうよ。

128 :ナイコンさん:02/10/02 05:37.net
おまえ等凄いな。
何話してるのかさっぱりわからん。


129 :ナイコンさん:02/10/04 10:51.net
xlat

130 :ナイコンさん:02/11/10 05:05.net
なんだかレベルが高いんだか低いんだか微妙な会話群だけど面白しょいのでage。
F/W屋さん多いのかな?
会話に加わろうかと思うが返り討ちにあいそうなんでここは我慢だ。

131 :ナイコンさん :02/11/16 09:08.net
cli
rep movsb


132 :ナイコンさん:02/11/16 09:13.net
bswap eax

エンディアン変換をするための命令。
でも486以降・・・。



133 :ナイコンさん:02/11/16 11:47.net
cmpxchg8b

134 :ナイコンさん:02/11/17 21:50.net
lahf
sahf
久々にニモニック表を見るまで、その存在を忘れていた...

135 :ナイコンさん:02/11/17 23:50.net
>>131

rep movsbといえば

昔、simっていうPC−9801上でIBM−PCのアプリケーションを動かすエミュレータがあって、
アプリケーションプログラム上のVRAMへの転送のためのrep movsbをint 90h(だったけ?)なんかに置き換えるパッチを
置き換えることをやったなあ・・・。

ちょっと、懐かしかったので書き込んでみました

(逆アセンブルなんて最近しとらん)。


136 :ナイコンさん:02/11/17 23:52.net
>>135


>置き換えるパッチを置き換えることをやったなあ・・・。

置き換えるパッチを作ったの間違い(スマソ)


137 :ナイコンさん:02/11/17 23:59.net
>>25

こんなような事故書換処理もあったねー。
(最近86アセンブリ言語使っていないので、まちがっていたらスマソ)

mov al,0c0h
add al,00dh
mov cs:label1,al
mov al,010h
add al,00bh
mov cs:label2,al
mov ax,5690
mov bx,400
mov cx,302
mov dx,1f4
label1:
nop
label2:
nop
int 1b
cmp ax,b0
jnz $

138 :ナイコンさん:02/11/19 03:59.net
今もvectorにあるよ。>sim
http://rd.vector.co.jp/soft/dos/util/se002710.html

139 :ナイコンさん:02/11/19 22:58.net
>>137
label2:
nop
のあとのint 1bhは、いらんと思うぞ。
cdh,01bhでバイナリサーチされて、真っ先にnopに変えられると思う。


140 :ナイコンさん:02/11/19 23:04.net
>>138
ざべに「パッチ真理教」という記事があって、毎月パッチ情報が載っていたね。
(あのころは、xxx真理教があんな教団だったとは、しらんかった)。


141 :ナイコンさん:02/11/19 23:46.net
nop

142 :ナイコンさん:02/11/20 00:43.net
>>141
実は xchg ax,ax という罠。

143 :142:02/11/20 00:47.net
なので、NOP のくせに最小クロック命令ではないのは
なぜなんだと、インテルを小一時間(略


144 :ナイコンさん:02/12/03 04:30.net
ENVIRONMENT DIVISION

145 :ナイコンさん:02/12/03 16:07.net
nop  ;保守

146 :ナイコンさん:02/12/06 00:30.net
; STOPボタンを無敵にする for PC-9800

xor  ax,ax
mov  es,ax
mov  ax,es:[0*4+0000h]
mov  dx,es:[0*4+0002h]
mov  es:[6*4+0000h],ax
mov  es:[6*4+0002h],dx
mov  ax,4C00h
int  21h


147 :ナイコンさん:02/12/16 04:11.net
このスレは無事に HLT しました。

148 :山崎渉:03/01/13 21:50.net
(^^)

149 :ナイコンさん:03/01/19 22:23.net
; ページングなしの環境、137GB超のHDの1台のみをPrimary masterに接続
; BIOSでUDMA2に指定、BIOS有効
; 32GB超のHDにてハングするのは、8GBしか利用できない古いBIOSを使うなどして回避
; I/O アドレスの配置は、Bus Dev Func Class   Base address
;                [0]:[xx]   SCSI H/A  6000h 6008h 6010h 600Ch C000h ROM(xxxxh) これに限る。
        org 100h ; for MS-DOS .COM file
start:     
0100 BA 00 60 83 C2 06 B0 E0-EE BB F0 01 C1 EB 04 8C 
0110 D8 03 C3 8B D8 C1 E3 04-89 1E E0 01 C1 E8 04 88 
0120 26 E2 01 BB E0 01 C1 EB-04 8C D8 03 C3 8B D8 C1 
0130 E3 04 89 1E E8 01 C1 E8-04 88 26 EA 01 BA 00 C0 
0140 83 C2 04 A1 E8 01 EF 83-C2 02 A1 EA 01 EF BA 00 
0150 C0 B0 08 EE BA 08 60 83-C2 02 EC A8 80 0F 85 F9 
0160 FF BA 00 C0 EC 24 FE EE-BA 00 C0 83 C2 02 B0 04 
0170 EE BA 00 60 42 B0 00 EE-42 B0 00 EE 42 B0 0F EE 
0180 42 B0 00 EE 42 B0 00 EE-42 83 EA 04 B0 02 EE 42 
0190 B0 FF EE 42 B0 FF EE 42-B0 FF EE 42 B0 E0 EE 42 
01A0 B0 25 EE 42 BA 00 C0 EC-0C 01 EE BA 08 60 83 C2 
01B0 02 EC A8 80 0F 85 10 00-EC A8 01 0F 84 09 00 B0 
01C0 65 CD 29 B8 01 4C CD 21-BA 00 C0 EC 24 FE EE B8 
01D0 00 4C CD 21                   
prddata label byte
01E0 00 00 00 00 00 04 00 80-00 00 00 00 00 00 00 00 
readbuffer label byte
01F0 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF 
    ; このあたりは、全部 ff です。
05E0 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF 
    
    end    start
UIDE-98 でも、Bigdrives のHD を扱えるじゃないか! ドライバ作れ(怒)!
怒りの会話でした。
いじょ。

150 :ナイコンさん:03/01/20 06:56.net
役に立ちそうなのでage!

151 :その1:03/01/20 23:00.net
;上のは、U-DMA READ ext のサンプルなので、今回は、U-DMA WRITE ext のサンプルなどを。実行条件は、上と同じ。
code  SEGMENT BYTE PUBLIC
    org 100h ; for MS-DOS .COM file
start: 
    ; device select
    mov   dx,06000h
    add   dx,6
    mov   al,0e0h ; master
    out   dx,al ; device register
    
    ; making PRD
    lea   bx,[buffer]
    shr   bx,4
    mov   ax,ds
    add   ax,bx    ; pysical linear address
    mov   bx,ax
    shl   bx,4
    mov   word ptr [prddata],bx
    shr   ax,4
    mov   byte ptr [prddata+2],ah
    
    ; calculate pysical linear address at PRD
    mov   bx,offset prddata
    shr   bx,4
    mov   ax,ds
    add   ax,bx    ; pysical linear address
    mov   bx,ax
    shl   bx,4
    mov   word ptr [linearprd],bx
    shr   ax,4
    mov   byte ptr [linearprd+2],ah

152 :その2:03/01/20 23:01.net
    ; set PRD on UIDEcard
    
    mov   dx,0c000h
    add   dx,4
    mov   ax,word ptr [linearprd]
    out   dx,ax
    add   dx,2
    mov   ax,word ptr [linearprd + 2]
    out   dx,ax
    
    ; set read/write control
    
    mov   dx,0c000h
    mov   al,0
    out   dx,al ; read write control
    
    ; check alternate status register
    
    mov   dx,6008h
    add   dx,2
    
@@:   in   al,dx
    test  al,080h
    
    jnz   @b
    
    ; clear busmaster start bit
    
    mov   dx,0c000h
    in   al,dx
    and   al,0feh
    out   dx,al

153 :その3:03/01/20 23:02.net
    ; clear Interrupt flag
    
    mov   dx,0c000h
    add   dx,2
    mov   al,4
    out   dx,al ; This bits is cleared
           ; when '1' is written to it by software.
    
    ; set command block registers
    
    mov   dx,06000h
    inc   dx
    
    mov   al,00h
    out   dx,al ; features register(dummy data)
    inc   dx
    
    mov   al,00h
    out   dx,al ; sector count previous register
    inc   dx
    
    mov   al,0fh
    out   dx,al ; LBA low previous register
    inc   dx
    
    mov   al,00h
    out   dx,al ; LBA mid previous register
    inc   dx

154 :その4:03/01/20 23:03.net
    mov   al,00h
    out   dx,al ; LBA high previous register
    inc   dx
    
    sub   dx,4
    
    mov   al,02h
    out   dx,al ; sector count current register
    inc   dx
    
    mov   al,0ffh
    out   dx,al ; LBA low current register
    inc   dx
    
    mov   al,0ffh
    out   dx,al ; LBA mid current register
    inc   dx
    
    mov   al,0ffh
    out   dx,al ; LBA high current register
    inc   dx
    
    mov   al,0e0h
    out   dx,al ; device head register
    inc   dx
    
    mov   al,035h ; 25h:Read, 35h:Write DMA ext
    out   dx,al ; command register
    inc   dx

155 :その5:03/01/20 23:04.net
    ; set busmaster start bit
    
    mov   dx,0c000h
    in   al,dx
    or   al,1
    out   dx,al
    
    ; check alternate status register
    
    mov   dx,06008h
    add   dx,2
    
@@:   in   al,dx
    test  al,80h
    jnz   @f  ; 手抜き
    
    in   al,dx
    test  al,01h
    
    jz   @f
    
    mov   al,'e' ; エラー
    int   29h
    mov   ax,4c01h
    int   21h
@@:    

156 :その6:03/01/20 23:10.net
    ; clear busmaster bit
    
    mov   dx,0c000h
    in   al,dx
    and   al,0feh
    out   dx,al
    
    ; normal end
    
    mov   ax,4c00h
    int   21h
    
code  ENDS
    
data  SEGMENT PARA PUBLIC
prddata     dd 00000000h  ; PYSICAL ADDRESS
        dw 0400h    ; transfar_bytes ; (200h以上32k未満)
        dw 8000h    ; EndOfTransfar
linearprd    dd 00000000h
data  ENDS
    
work  SEGMENT PARA PUBLIC
buffer     db 400h dup (011h) ; 書きこむデータ
work  ENDS
    
end   start
; コレを実行後、上のU-DMA READ ext をexdeb で実行すると、readbufferの内容が、U-DMA WRITE extで
;書きこんだとおりになるので、Bigdrives 読み書き可である。で、結論は、ドライバ作れよ(怒)となるわけだ。

157 :間違えた。:03/01/20 23:17.net
(誤) jnz   @f  ; 手抜き
--------------------------------
(正) jnz   @b  ; 手抜き

158 :ナイコンさん:03/01/20 23:18.net
役に立ちそうなのでreage!

159 :ナイコンさん:03/01/21 01:32.net
C9

160 :ナイコンさん:03/01/21 02:02.net
CC

161 :ナイコンさん:03/01/22 00:27.net
   jmp   short 160

162 :ナイコンさん:03/01/22 00:31.net
FFFFF

163 :ナイコンさん:03/01/22 00:58.net
FF11

164 :ナイコンさん:03/01/22 04:21.net
6800 Z80をかじった後で、8086アセンブラを使って
掛け算命令があることに、すごいビックリしたな。

むちろん、データ長も16ビットなので、ほとんど
BASICみたいな手軽さで書けるじゃんと思いました。

それももう15年以上前の話だよな。
86系アセンブラ懐かしーっす。

165 : :03/01/22 09:51.net
6809はイケるんだけどなぁ。8086の本最近買ったけど、
マシン語眺めてるとバスが倍なんでくらくらした。32ビットはもう、
理解不能。リアルタイムで8086使ってゲームでも作ってみたかったな。

素朴過ぎる疑問だけど単純な計算だったら8ビットの方が無駄がないよね。
1+1を一万回再計算するなら、8ビットの3G(ギガ)と32ビットの3Gでも差はないんじゃないの?

166 :ナイコンさん:03/01/25 08:22.net
>>165
1万回だと8bitはオーバーフロー処理が必要。
やはり32bitレジスタは便利だよ。

200回程度インクリメントするなら、メモリ節約
にはなるね。

167 :ナイコンさん:03/01/25 10:17.net
スーパースカラになった時点で決定的な差が

168 :ナイコンさん:03/01/25 10:58.net
>>166
俺は>>165の文章を
mov cx, 10000
lbl1:
mov al, 1
add al, 1
loop lbl1
と解釈したが。
これならオーバーフロー処理はいらねぇ。

169 :ナイコンさん:03/01/25 11:41.net
役に立ちそうなのでage!

170 :ナイコンさん:03/01/25 16:10.net
68030のマニュアル読んだとき165と似たようなこと感じたな。
「凄いな、こんなに沢山レジスタ(とポインタ)使えるよ。
86系は今は普及してるけど後からこの仕様がボディブロー
のように効いてきて最後には負けるんじゃない?」
とか思ったのは遠い遠い昔のはなしだったり。

86スレなのでsage

171 :ナイコンさん:03/01/25 17:49.net
>>170
はじめてIA-32のアドレッシングモードを知った時、
68kのパクリか!と思ったよ。
でもすぐにEIPやESP相対アドレッシングが無いことに
気が付いて、がっかりした記憶が。
あと、汎用レジスタが増えずに、FS,GSのみ追加された
ことにも首をかしげた。当時、プロテクトモードのことは
余り(というかほとんど)知らなかったからなぁ。

172 :171:03/01/25 17:52.net
あー、すまん。
ESP相対は有るな。勘違いしとったよ。
EIP相対は無いが。

173 :ナイコンさん:03/01/26 12:19.net
「初めての486」を読んで
「ごちゃごちゃしていて汚い設計だな」
と思ったが
「どうせ面倒な部分はシステムが管理するからいいや」
と思考停止したあの日

174 :ナイコンさん:03/01/26 15:05.net
POP SP
RET


175 :ナイコンさん:03/01/26 23:08.net
http://pc3.2ch.net/test/read.cgi/tech/1040297337/l50
関連リンク 「アセンブラヽ(`Д´)ノモルァ」

176 :ナイコンさん:03/01/27 03:09.net
HALT

177 :ナイコンさん:03/01/27 05:03.net
INTRをアクティブにしました

178 :ナイコンさん:03/01/27 13:48.net
STI
CLI

179 :ナイコンさん:03/01/29 23:38.net
loadall386 ; ぼくのこと忘れてください.....。

180 :ナイコンさん:03/01/29 23:55.net
>>176
HALTじゃなくてHLTだろが!!

181 :私的EQU:03/01/30 01:21.net
M EQU MOV
I EQU INC
D EQU DEC
A EQU ADD
S EQU SUB
ML EQU MUL
DV EQU DIV
C EQU CMP
CA EQU CALL

182 :ナイコンさん:03/01/31 01:55.net
>>181
何か許しがたいものがある。

183 :ナイコンさん:03/02/03 15:03.net
U EQU PUSH
O EQU POP
UA EQU PUSHA
OA EQU POPA

100行超えたあたりでいちいち打ち込むの面倒くさくなったんだよね。
頻繁に使う命令は自己流に短縮したり

184 :ナイコンさん:03/02/06 18:34.net
mov al, 0FFh
xchg al, byte ptr[semaphore] ; 昔は、使っていた。

185 :ナイコンさん:03/02/06 21:52.net
>>183
構造化マクロとか68風ニーモニックマクロとか、あったね。
だだ、仕事で使うのは、止めてけれと思うことしばし。

186 :ナイコンさん:03/02/20 06:11.net
最近アセンブラいじってる?

187 :ナイコンさん:03/02/24 23:39.net
>>186
つーか、win32apiとかアセンブラから読んでたら氏んじまう

188 :ナイコンさん:03/02/25 18:54.net
PUSH パラメータ
PUSH パラメータ
PUSH パラメータ
CALL win32API

なだけだが、

189 :山崎渉:03/04/17 12:26.net
(^^)

190 :山崎渉:03/04/20 05:59.net
   ∧_∧
  (  ^^ )< ぬるぽ(^^)

191 :山崎渉:03/05/22 02:09.net
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―

192 :ナイコンさん:03/06/03 23:45.net
 mov cx,0ffffh
@@:
 nop
 loop @b
; 暇つぶし

193 :ナイコンさん:03/06/07 12:03.net
かい〜わ
かい〜の

194 :ナイコンさん:03/06/08 08:35.net
保守

195 :ナイコンさん:03/07/01 14:18.net
;hoshu @age
mov sure,ue

総レス数 452
142 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
read.cgi ver.24052200