Скачиваний:
24
Добавлен:
02.05.2014
Размер:
12.44 Кб
Скачать

Assembler Source Code a:link {text-decoration: none} a:visited {text-decoration: none} a:hover {text-decoration: none; color:#ff0000}     ; simplest.asm ; simplest virtual device for emu8086 in pure assembly code.... ; this example reads and sends ascii codes to virtual port 3. ; for real test, it is required to compile this code and run it outside ; of the emulator (external->run). if you copy the compiled file to c:\emu8086\devices\ ; folder it will start automatically. when simplest.com is running it's possible ; to see the interraction with the emulator using this code: ; #start=simplest.com# ; mov al, 'a' ; send_byte: ; out 3, al ; inc al ; jmp send_byte ; end ;; note: you can uncomment block of code by selecting it and clicking edit->uncomment block. name "simplest" org 100h jmp start filename db "c:\emu8086.io", 0 ; note: for the emulator this path is c:\emu8086\c\emu8086.io handle dw ? print macro x, y, attrib, sdat LOCAL s_dcl, skip_dcl, s_dcl_end pusha mov dx, cs mov es, dx mov ah, 13h mov al, 1 mov bh, 0 mov bl, attrib mov cx, offset s_dcl_end - offset s_dcl mov dl, x mov dh, y mov bp, offset s_dcl int 10h popa jmp skip_dcl s_dcl DB sdat s_dcl_end DB 0 skip_dcl: endm clear_screen macro pusha mov ax, 0600h mov bh, 0000_1111b mov cx, 0 mov dh, 24 mov dl, 79 int 10h popa endm start: clear_screen call create_if_missing simplest: print 1,1,0010_1111b, " simplest virtual device for emu8086 " print 1,2,0010_1111b, " press esc to exit - press enter to get byte without sending " read_byte: print 1,4,0010_1010b, " get byte from virtual port 0 ---> " mov bx, 3 call get_byte_from_port mov ah, 2 int 21h write_byte: print 1,5,0010_1010b, " send byte to virtual port 0 ---> " mov ah, 1 int 21h cmp al, 27 ; esc? je stop cmp al, 0dh ; enter? je just_get mov bx, 3 mov dl, al call send_byte_to_port just_get: call wait_a_bit clear_screen jmp simplest stop: clear_screen print 1,1,1110_0000b, " simplest virtual device stoped " mov ah, 2 mov dl, 0ah int 21h mov ah, 2 mov dl, 0dh int 21h ret ; entry: bx - port number ; return: dl - value get_byte_from_port proc pusha mov i_port, bx mov al, 2 mov dx, offset filename mov ah, 3dh int 21h ; open... jnc kg print 1,7,0000_1100b, " cannot open c:\emu8086.io " jmp err_i kg: mov handle, ax mov al, 0 mov bx, handle mov cx, 0 mov dx, i_port mov ah, 42h int 21h ; seek... mov bx, handle mov dx, offset i_byte mov cx, 1 mov ah, 3fh int 21h ; read byte from file... mov bx, handle mov ah, 3eh int 21h ; close file... err_i: popa mov dl, i_byte ; return. ret i_port dw ? i_byte db ? endp ; entry: bx - port number ; dl - value send_byte_to_port proc pusha mov o_port, bx mov o_byte, dl mov al, 2 mov dx, offset filename mov ah, 3dh int 21h ; open... jnc ks print 1,7,0000_1100b, " cannot open c:\emu8086.io " jmp err_s ks: mov handle, ax mov al, 0 mov bx, handle mov cx, 0 mov dx, o_port mov ah, 42h int 21h ; seek... mov bx, handle mov dx, offset o_byte mov cx, 1 mov ah, 40h int 21h ; write to file... mov bx, handle mov ah, 3eh int 21h ; close file... err_s: popa ret o_port dw ? o_byte db ? endp create_if_missing proc pusha mov dx, offset filename mov ah, 43h mov al, 0 int 21h ; get attributes. jc create: jmp ok_f create: mov ah, 3ch mov cx, 0 mov dx, offset filename mov ah, 3ch int 21h ; create... mov bx, ax mov ah, 3eh int 21h ; close... ok_f: popa ret endp wait_a_bit proc pusha mov ah, 2ch int 21h mov orig_secs, dh wait_more: mov ah, 2ch int 21h cmp orig_secs, dh je wait_more popa ret orig_secs db ? endp

; - Other Assembler Source Codes -

; - asm2html by emu8086 -

Соседние файлы в папке asm_files