
Эмулятор процессора Intel 8086 версия 4.05 (ENG) / asm_files / int21.asm
.htmlAssembler Source Code a:link {text-decoration: none} a:visited {text-decoration: none} a:hover {text-decoration: none; color:#ff0000} ; int21.asm ; this sample gets a string from a user, then it prints it out. ; this example uses dos interrupt: 21h name "int21" org 100h jmp start ; when no file path is specified the default file path is: ; c:\emu8086\MyBuild ; if path is specified, it is emulated in: ; c:\emu8086\vdrive\ ; for example, c:\test.txt is c:\emu8086\vdrive\c\test.txt ; this is done to prevent disasters and accidental overwriting of valuable files. ; relative paths such as "c:\mydir\..\autoexec.bat" are disabled for the same reasons. ; declarations: ; buffers hold ascii chars for INT 21h/0Ah input function, ; first byte is its maximum size, second byte: actual size. ; format of INT 21h/0Ah input buffer: ; -byte-offset- -number-of-bytes- -description- ; 00 1 buffer size ; 01 1 number of characters actually read (excluding cr). ; 02 1 to buffer-size actual buffer contents (including cr). s1 db 100,?, 100 dup(' ') t2 db 100,?, 100 dup(' ') filename db 30,?, 30 dup(' ') ; file name should be in 8.3 - dos compatible format. ; file handle: handle dw 0 ; set segment registers to code: start: mov ax, cs mov ds, ax mov es, ax jmp m1 msg1 db "enter any text: $" m1: mov dx, offset msg1 mov ah, 9 int 21h ; input a string: mov dx, offset s1 mov ah, 0ah int 21h jmp m2 msg2 db 0Dh,0Ah,"enter file name: $" m2: mov dx, offset msg2 mov ah, 9 int 21h ; input filename: mov dx, offset filename mov ah, 0ah int 21h ; set 0 to the end of the filename: xor bx, bx mov bl, filename[1] ; get actual size. mov filename[bx+2], 0 ; create new file: mov cx, 0 mov ah, 3ch mov dx, offset filename+2 int 21h jc error mov handle, ax ; write buffer to file: mov ah, 40h mov bx, handle mov dx, offset s1+2 xor cx, cx mov cl, s1[1] int 21h jc error ; close file mov bx, handle mov ah, 3eh int 21h jc error ; open existing file: mov al, 0 ; read. mov ah, 3dh mov dx, offset filename+2 int 21h jc error mov handle, ax ; read bytes from file mov ah, 3fh mov bx, handle xor cx, cx mov cl, t2[0] mov dx, offset t2[2] int 21h jc error mov t2[1], al ; close file mov bx, handle mov ah, 3eh int 21h jc error jmp m3 msg3 db 0Dh,0Ah,"read from file: $" m3: mov dx, offset msg3 mov ah, 9 int 21h ; set '$' to the end of the buffer: xor bx, bx mov bl, t2[1] ; get actual size. mov t2[bx+2], '$' ; print the buffer: mov dx, offset t2[2] ; skip 2 control bytes. mov ah, 9 int 21h jmp ok ; print error message: error: jmp m5 msg5 db 0Dh,0Ah,"error...",0Dh,0Ah,'$' m5: mov dx, offset msg5 mov ah, 9 int 21h ok: jmp m4 msg4 db 0Dh,0Ah,"press any key...",0Dh,0Ah,'$' m4: mov dx, offset msg4 mov ah, 9 int 21h mov ah, 0 int 16h ; exit to the operating system: mov ah, 4ch int 21h
; - Other Assembler Source Codes -
; - asm2html by emu8086 -