MSDOS 16-bit programming Old chpt 13 Current chapt 14.

Slides:



Advertisements
Similar presentations
DOS and BIOS Interrupts DOS and BIOS interrupts are used to perform some very useful functions, such as displaying data to the monitor, reading data from.
Advertisements

Assembly Language for x86 Processors 6th Edition Chapter 5: Procedures (c) Pearson Education, All rights reserved. You may modify and copy this slide.
More about procedures and Video Processing. Lesson plan Review existing concepts More about procedures and boolean expression Video processing.
MS DOS File IO Text chapter 13. DateTime C:\MASM615>make16 datetime Assembling: datetime.asm Volume in drive C has no label. Volume Serial Number is 07D
CEN 226: Computer Organization & Assembly Language :CSC 225 (Lec#4)
Assembly Language for Intel-Based Computers Chapter 15: BIOS-Level Programming (c) Pearson Education, All rights reserved. You may modify and.
Assembly Language for Intel-Based Computers, 4 th Edition Chapter 6: Conditional Processing (c) Pearson Education, All rights reserved. You may modify.
Assembly Language for Intel-Based Computers Chapter 5: Procedures Kip R. Irvine.
Runtime Stack Managed by the CPU, using two registers
Assembly Language Advantages 1. It reveals the secret of your computer’s hardware and software. 2. Speed. 3. Some special applications and occasions. Disadvantages.
Kip Irvine: Assembly Language for Intel-Based Computers Overview Stack Operations (PUSH and POP) Procedures Procedure Parameters Software Interrupts MS-DOS.
MSDOS 16-bit programming
Flow Control Instructions
Assembly Language for Intel-Based Computers Chapter 13: 16-Bit MS-DOS Programming Kip R. Irvine.
Putting together a mouse driven application Divide and conquer.
Kip Irvine: Assembly Language for Intel-Based Computers
Irvine, Kip R. Assembly Language For Intel-Based Computers.data string db "This is a string." COUNT = ($–string) ; calculate string length.code mov cx,COUNT.
Assembly Language for Intel-Based Computers, 4 th Edition Chapter 13: 16-Bit MS-DOS Programming (c) Pearson Education, All rights reserved. You may.
Assembly Language for Intel-Based Computers Chapter 16: Expert MS-DOS Programming (c) Pearson Education, All rights reserved. You may modify.
Assembly Language for Intel-Based Computers, 4 th Edition Chapter 5: Procedures (c) Pearson Education, All rights reserved. You may modify and copy.
Overview Chapter 13: 16-bit MS-DOS Programming MS-DOS and the IBM-PC
CS2422 Assembly Language & System Programming October 24, 2006.
Irvine, Kip R. Assembly Language For Intel-Based Computers XADD Instruction.code mov ax,1000h mov bx,2000h ; AX = 1000h, BX = 2000h xadd ax,bx ; AX = 3000h,
8.4 Instruction Execution Times TOBIN PROC FAR SUB AX,AX MOV DX,AX MOV CX,4 NEXTD: PUSH CX SUB BP,BP MOV CX,4 GETNUM: RCL BX,1 RCL BP,1 LOOP GETNUM.
CEN 226: Computer Organization & Assembly Language :CSC 225 (Lec#8) By Dr. Syed Noman.
CEN 226: Computer Organization & Assembly Language :CSC 225 (Lec#6)
ICS312 Set 4 Program Structure. Outline for a SMALL Model Program Note the quiz at the next lecture will be to reproduce this slide.MODEL SMALL.586 ;
Micro-Computer Applications: Procedures & Interrupts Dr. Eng. Amr T. Abdel-Hamid ELECT 707 Fall 2011.
Assembly Language for Intel-Based Computers, 5 th Edition Chapter 13: 16-Bit MS-DOS Programming (c) Pearson Education, All rights reserved.
Assembly Language for Intel-Based Computers, 4 th Edition Chapter 3: Assembly Language Fundamentals Assembling, Linking and Running Programs Example Programs.
Lecture 11 Last notes on interrupts and exam review Dr. Dimitrios S. Nikolopoulos CSL/UIUC.
BIOS1 Basic Input Output System BIOS BIOS refers to a set of procedures or functions that enable the programmer have access to the hardware of the computer.
ECE291 Computer Engineering II Lecture 13 Dr. Zbigniew Kalbarczyk University of Illinois at Urbana- Champaign.
Assembly Language for Intel-Based Computers, 5 th Edition Chapter 13: 16-Bit MS-DOS Programming (c) Pearson Education, All rights reserved.
Assembly Language for x86 Processors 6th Edition
Stack Operations LIFO structure (last-in,first-out) –The last value put into the stack is the first value taken out Runtime stack –A memory array that.
Riyadh Philanthropic Society For Science Prince Sultan College For Woman Dept. of Computer & Information Sciences CS 251 Introduction to Computer Organization.
BIOS and DOS Programming in DOS INT 10 and 21H. Interrupts There are some extremely useful subroutines within BIOS or DOS that are available to the user.
1 Chapter 5: Procedures and Interrupts Assembly Language for Intel-Based Computers, Kip R. Irvine 3rd edition 3/17/2000.
Assembly Language for Intel-Based Computers Chapter 13: 16-Bit MS-DOS Programming Kip R. Irvine.
CSNB374: Microprocessor Systems Chapter 5: Procedures and Interrupts.
Strings, Procedures and Macros
Arithmetic Flags and Instructions
File I/O MS-DOS Interrupt 21h has many functions dealing with file and directory I/O services. Both MS-DOS and MS_Windows use 16- bit integers called HANDLES.
Sahar Mosleh California State University San MarcosPage 1 Nested Procedure calls and Flowcharts.
Binary Number Output To display a number in binary format, a program looks at each bit in the number and sends the ASCII equivalent of a ‘1’ (31h) or a.
CEN 226: Computer Organization & Assembly Language :CSC 225 (Lec#9) By Dr. Syed Noman.
ASSEMBLY LANGUAGE FOR INTEL-BASED COMPUTERS, PROCEDURES.
Video systems. Lesson plan Review the code for the previous exercise Video systems Review for midterm exam.
21/11/2005CAP2411 Input & Output Instructions CPU communicates with the peripherals through I/O registers called I/O ports. There are 2 instructions, IN.
Assembly Language for Intel-Based Computers, 5 th Edition Chapter 10: Structures and Macros (c) Pearson Education, All rights reserved. You.
String Instructions String instructions were designed to operate on large data structures. The SI and DI registers are used as pointers to the data structures.
In Class Program Write, assemble and test a program: –Use the DB directive to define the following list of numbers and name it array: 31h, 32h, 33h, 34h.
Chapter Bit MS-DOS Programming Assembly Language for Intel-Based Computers, 4th edition Kip R. Irvine.
October 1, 2003Serguei A. Mokhov, 1 SOEN228, Winter 2003 Revision 1.2 Date: October 25, 2003.
Irvine, Kip R. Assembly Language for Intel-Based Computers. Chapter 7: Integer Arithmetic Slides to Accompany Assembly Language for Intel-Based Computers,
Control Structure vs. Assembly Language NASM. If-then-else If conditional then then_actions jump to endif else else_actions endif.
Assembly Language for Intel-Based Computers, 4 th Edition Chapter 13: 16-Bit MS-DOS Programming Interrupts (c) Pearson Education, All rights reserved.
Assembly Language Lecture 2. Lecture Outline Program Structure Memory models Data Segment Stack Segment Code Segment Input and Output Instructions INT.
File Operations. FILE PROCESSING For the purposes of the following discussion, reading means copying all or part of an existing file into memory Writing.
Chapter 5: Procedures and Interrupts
1st prog! Q: Read a char – from a keyboard & display it at the beginning of the next line! ====== A.
Microprocessor and Assembly Language
Microprocessor and Assembly Language
(The Stack and Procedures)
Chapter 4: Instructions
(The Stack and Procedures)
Unit:08 Software Interrupts
(The Stack and Procedures)
By Nasser Halasa Assembly Language.
Presentation transcript:

MSDOS 16-bit programming Old chpt 13 Current chapt 14

interrupts You can customize interrupt handling for DOS and BIOS by installing you own handlers The hardware was designed with this possibility of tinkering, or customizing. You can replace any service routine with your own.

The vector table: pg 598 The vector table is in the first K of RAM, locations 0:0 to 0:03FF The entries in the table, called “interrupt vectors” are 32 bit seg:ofs values that point to existing service routines. The specific values vary from one computer to another due to different BIOS or DOS versions

The vector table The interrupt vectors correspond to interrupt numbers The address of int 0 handler (div by 0) is 02C1:5186h. The offset for a vector can be found by multiplying the interrupt number by 4 (shl 2)

interrupts You can execute an interrupt by performing an int XXX This is called a software interrupt A hardware interrupt may also call the handler (timer, ports, keyboard and so on all send signals to the PIC).

interrupts A hardware interrupt is generated by the Intel 8259 PIC which signals the cpu to suspend execution of the current program and execute an interrupt service handler. Note that the current program stack is used to save the return address. The instructions CLI clear interrupt flag (disable) and STI (enable) set interrupt flag enable a program to temporarily disable/re-enable interrupts if sensitive operations are underway, like changing the value of a segment register.

DOS ints Text describes a few DOS interrupts I have a bunch of DOS and ROM-BIOS referenced herehere

helloworld TITLE Hello World Program (Hello.asm) ; This program displays "Hello, world!".model small.stack 100h.386.data message BYTE "Hello, world!",0dh,0ah.code main PROC mov mov ds,ax mov ah,40h; write to file/device mov bx,1; output handle mov cx,SIZEOF message; number of bytes mov dx,OFFSET message; addr of buffer int 21h.exit main ENDP END main

hello.asm C:\MASM615\EXAMPLES\CH13>hello Hello, world! C:\MASM615\EXAMPLES\CH13>

Hello v2 uses startup to initialize DS TITLE Hello World Program (Hello2.asm) ; This program displays "Hello, world!".model small.stack 100h.386.data message BYTE "Hello, world!",0dh,0ah.code main PROC.STARTUP mov ah,40h; write to file/device mov bx,1; output handle mov cx,SIZEOF message; number of bytes mov dx,OFFSET message; addr of buffer int 21h.exit main ENDP END main

Encrypt.asm: file encryption using XOR (char,value) and file redirect Int 21h function 6 reads chars without pausing or filtering control chars. This is good (only) if we are redirecting input (using DOS redirect > and <) Text example arbitrarily uses 239 as the value to XOR each char with. Note that a 2 nd XOR with the same value will toggle back to the original value

Encrypt.asm: file encryption using XOR (char,value) and file redirect This is the same idea we encountered in an earlier chapter, but it combines xor encryption with file redirection. To run you might type: C:\MASM615\EXAMPLES\CH13>encrypt message.txt

Encrypt.asm TITLE Encryption Program (Encrypt.asm) ;; read and encrypt a file. Run it from the ; command prompt, using redirection: ; Encrypt outfile.txt ; Function 6 is also used for output, to avoid ; filtering ASCII control characters. INCLUDE Irvine16.inc XORVAL = 239; any value between code main PROC mov mov ds,ax L1:mov ah,6; direct console input mov dl,0FFh; don't wait for character int 21h; AL = character jz L2; quit if ZF = 1 (EOF) xor al,XORVAL mov ah,6; write to output mov dl,al int 21h jmp L1; repeat the loop L2:exit main ENDP END main

uses dos redirection ( ) C:\MASM615\EXAMPLES\CH13>encrypt message.txt C:\MASM615\EXAMPLES\CH13> secret.txt secret message contained here message.txt: œŠŒŠ›Ï‚ŠœœŽˆŠÏâ匀›Ž†Š‹Ï‡ŠŠ

Made some changes to this program TITLE Buffered Keyboard Input (Keybd.asm) ; Test function 3Fh, read from file or device ; with the keyboard. Flush the buffer. INCLUDE Irvine16.inc.data firstName BYTE 15 DUP(?) terminal1 byte 0 lastName BYTE 30 DUP(?) terminal2 byte 0.code main PROC mov mov ds,ax

Keybd continued ; Input the first name: mov ah,3Fh mov bx,0; keyboard mov cx,LENGTHOF firstName mov dx,OFFSET firstName int 21h ; Disable the following line to see what happens ; when the buffer is not flushed: call FlushBuffer ; Input the last name: mov ah,3Fh mov bx,0; keyboard mov cx,LENGTHOF lastName mov dx,OFFSET lastName int 21h quit:call Crlf mov dx,offset firstname call writeString call Crlf mov dx,offset lastname call writeString call Crlf

Flush type-ahead buffer to eoln ; FlushBuffer PROC ; ; Flush the standard input buffer. ; Receives: nothing. Returns: nothing ; data oneByte BYTE ?.code pusha L1: mov ah,3Fh; read file/device mov bx,0; keyboard handle mov cx,1; one byte mov dx,OFFSET oneByte; save it here int 21h; call MS-DOS cmp oneByte,0Ah; end of line yet? jne L1; no: read another popa ret FlushBuffer ENDP END main

Run keybd C:\MASM615>keybd first has a max of 15 chars last has a max of 30xxxxxxxxxxxxxxxxxxxxxxxx first has a max last has a max of 30xxxxxxxxxx

read from file or device C:\MASM615\EXAMPLES\CH13>keybd C:\MASM615\EXAMPLES\CH13>

DateTime.asm Include Irvine16.inc Write PROTO char:BYTE.data str1 BYTE "Date: ",0 str2 BYTE ", Time: ",0.code main PROC mov mov ds,ax ; Display the date: mov dx,OFFSET str1 call WriteString mov ah,2Ah; get system date int 21h movzx eax,dh; month call WriteDec INVOKE Write,'-' movzx eax,dl; day call WriteDec INVOKE Write,'-' movzx eax,cx; year call WriteDec ; Display the time: mov dx,OFFSET str2 call WriteString mov ah,2Ch; get system time int 21h movzx eax,ch; hours call WritePaddedDec INVOKE Write,':' movzx eax,cl; minutes call WritePaddedDec INVOKE Write,':' movzx eax,dh; seconds call WritePaddedDec call Crlf exit main ENDP

DateTime.asm ; Write PROC char:BYTE ; Display a single character. ; push eax push edx mov ah,2 mov dl,char int 21h pop edx pop eax ret Write ENDP ; WritePaddedDec PROC ; Display unsigned integer in EAX, padding ; to two digit positions with a leading zero. ; IF eax < 10 push eax push edx mov ah,2 mov dl,'0' int 21h pop edx pop eax.ENDIF call WriteDec ret WritePaddedDec ENDP END main

DateTime.asm C:\MASM615\EXAMPLES\CH13>datetime Date: , Time: 17:55:19 C:\MASM615\EXAMPLES\CH13>

What is a binary file? If you write chars (or – in java- strings) to a file, it contains numerical values 16 (or 32) bits per char depending if it is ASCII or Unicode. If you write numbers to a file – say dword values- it contains 4 bytes per value. This latter could be said to be a binary file.

binfile.asm TITLE Binary File Program (Binfile.asm) ; Create a binary file containing an array ; of doublewords. ; Last update: 11/12/01 INCLUDE Irvine16.inc.data myArray DWORD 50 DUP(?) fileName BYTE "binary array file.bin",0 fileName2 BYTE "file2.bin",0 fileHandle WORD ? commaStr BYTE ", ",0 ; Set CreateFile to zero if you just want to ; read and display the existing binary file. CreateFile = 1.code main PROC mov mov ds,ax.IF CreateFile EQ 1 call FillTheArray call DisplayTheArray call CreateTheFile call WaitMsg call Crlf.ENDIF call ReadTheFile call DisplayTheArray quit: call Crlf exit main ENDP

binfile.asm ; ReadTheFile PROC ; ; Open and read the binary file. ; Receives: nothing. Returns: nothing ; mov ax,716Ch ; extended file open mov bx,0; mode: read-only mov cx,0 ; attribute: normal mov dx,1; open existing file mov si,OFFSET fileName; filename int 21h ; call MS-DOS jc quit; quit if error mov fileHandle,ax; save handle ; Read the input file, then close the file. mov ah,3Fh; read file mov bx,fileHandle; file handle mov cx,SIZEOF myArray; max bytes to read mov dx,OFFSET myArray; buffer pointer int 21h jc quit; quit if error mov ah,3Eh ; function: close file mov bx,fileHandle; output file handle int 21h ; call MS-DOS quit: ret ReadTheFile ENDP

binfile.asm ; DisplayTheArray PROC ; ; Display the array ; Receives: nothing. Returns: nothing ; mov CX,LENGTHOF myArray mov si,0 L1: mov eax,myArray[si]; get a number call WriteHex; display the number mov edx,OFFSET commaStr; display a comma call WriteString add si,TYPE myArray; next array position loop L1 ret DisplayTheArray ENDP ; FillTheArray PROC ; ; Fill the array with random integers. ; Receives: nothing. Returns: nothing ; mov CX,LENGTHOF myArray mov si,0 L1: mov eax,1000h; generate random integers call RandomRange; between in EAX mov myArray[si],eax; store in the array add si,TYPE myArray; next array position loop L1 ret FillTheArray ENDP

binfile.asm ; CreateTheFile PROC ; ; Create a file containing binary data ; Receives: nothing. Returns: nothing ; mov ax,716Ch ; create file mov bx,1; mode: write only mov cx,0 ; normal file mov dx,12h; action: create/truncate mov si,OFFSET fileName2; filename int 21h ; call MS-DOS jc quit; quit if error mov fileHandle,ax; save handle ; Write integer array to the file. mov ah,40h; write file or device mov bx,fileHandle; output file handle mov cx,SIZEOF myArray; number of bytes mov dx,OFFSET myArray; buffer pointer int 21h jc quit; quit if error ; Close the file. mov ah,3Eh ; function: close file mov bx,fileHandle; output file handle int 21h ; call MS-DOS quit: ret CreateTheFile ENDP END main

binfile.asm C:\MASM615\EXAMPLES\CH13>binfile E2, F6, 00000E87, , DF, 00000C10, A, 00000E78, , , B4, , B4, 00000BB0, C9, 00000B59, , E, 00000BCE, 00000CDB, DF, 00000C51, 00000E86, , F6, 00000E1C, 00000DF5, 00000C86, E, , F, 00000ED7, DB, B, 00000D49, AA, B2, 00000B16, 00000B76, B4, 00000FE6, A, 00000AEA, 00000DE7, B, A, E9, 00000F79, 00000D36, BB, Press any key to continue E2, F6, 00000E87, , DF, 00000C10, A, 00000E78, , , B4, , B4, 00000BB0, C9, 00000B59, , E, 00000BCE, 00000CDB, DF, 00000C51, 00000E86, , F6, 00000E1C, 00000DF5, 00000C86, E, , F, 00000ED7, DB, B, 00000D49, AA, B2, 00000B16, 00000B76, B4, 00000FE6, A, 00000AEA, 00000DE7, B, A, E9, 00000F79, 00000D36, BB, C:\MASM615\EXAMPLES\CH13>

fileio.asm TITLE Extended Open/Create (Fileio.asm) ; Demonstration of 16-bit FileIO under Windows 95/98/ME. ; The complete program does not appear in the text, but ; excerpts do appear. ; Last update: 11/12/01 INCLUDE Irvine16.inc.data Date WORD ? handle WORD ? actionTaken WORD ? FileName BYTE "long_filename.txt",0 NewFile BYTE "newfile.txt",0.code

fileio.asm main PROC mov mov ds,ax ;Create new file, fail if it already exists: mov ax,716Ch ; Extended Open/Create mov bx,2; read-write mov cx,0 ; normal attribute mov dx,10h; action: create mov si,OFFSET NewFile int 21h jc failed mov handle,ax ; file handle mov actionTaken,cx ; action taken to open file mov ax,cx call writeint call crlf ;Open existing file mov ax,716Ch ; Extended Open/Create mov bx,0; read-only mov cx,0 ; normal attribute mov dx,1; open existing file mov si,OFFSET Filename int 21h jc failed mov handle,ax ; file handle mov actionTaken,cx ; action taken to open file mov ax,cx call writeint call crlf

fileio.asm ;Create new file or truncate existing file: mov ax,716Ch ; Extended Open/Create mov bx,2; read-write mov cx,0 ; normal attribute mov dx,10h + 02h; action: create + truncate mov si,OFFSET NewFile int 21h jc failed mov handle,ax ; file handle mov actionTaken,cx ; action taken to open file mov ax,cx call writeint call crlf failed: exit main ENDP END main

fileio.asm C:\MASM615\EXAMPLES\CH13>fileio

readfile TITLE Read a text file (Readfile.asm) ; Read, display, and copy a text file. ; Last update: 9/11/01 INCLUDE Irvine16.inc.data BufSize = 5000 infile BYTE "my_text_file.txt",0 outfile BYTE "my_output_file.txt",0 inHandle WORD ? outHandle WORD ? buffer BYTE BufSize DUP(?) bytesRead WORD ?.code main PROC mov mov ds,ax

readfile ; Open the input file mov ax,716Ch ; extended create or open mov bx,0 ; mode = read-only mov cx,0; normal attribute mov dx,1; action: open mov si,OFFSET infile int 21h ; call MS-DOS jc quit; quit if error mov inHandle,ax ; Read the input file mov ah,3Fh; read file or device mov bx,inHandle; file handle mov cx,BufSize; max bytes to read mov dx,OFFSET buffer; buffer pointer int 21h jc quit; quit if error mov bytesRead,ax ; Display the buffer mov ah,40h; write file or device mov bx,1; console output handle mov cx,bytesRead; number of bytes mov dx,OFFSET buffer; buffer pointer int 21h jc quit; quit if error ; Close the file mov ah,3Eh ; function: close file mov bx,inHandle; input file handle int 21h ; call MS-DOS jc quit; quit if error

readfile ; Create the output file mov ax,716Ch ; extended create or open mov bx,1 ; mode = write-only mov cx,0; normal attribute mov dx,12h; action: create/truncate mov si,OFFSET outfile int 21h ; call MS-DOS jc quit; quit if error mov outHandle,ax; save handle ; Write buffer to new file mov ah,40h; write file or device mov bx,outHandle; output file handle mov cx,bytesRead; number of bytes mov dx,OFFSET buffer; buffer pointer int 21h jc quit; quit if error ; Close the file mov ah,3Eh ; function: close file mov bx,outHandle; output file handle int 21h ; call MS-DOS quit: call Crlf exit main ENDP END main

Run of readfile C:\MASM615>readfile here is a sample data file with several lines in it

Findfirst…findnext: dir

.data filename byte '*.asm',0 DTA label byte search byte 21 dup(?) other byte 9 dup(?) fname byte 'namehereXXXX',0.code main PROC mov mov ds,ax ; must point ds to main mov es,ax mov dx, offset DTA mov ah, 1Ah int 21h ;;;set DTA to my buffer area mov cx, 1 ;;; file attribute read-only mov dx,offset filename mov ah, 4Eh int 21h xor cx,cx top: mov dx,offset fname inc cx test cx,3h jnz writeit call crlf writeit: call writestring blanks 5 mov ah,4fh int 21h jnc top quit: exit

Tabbing for the dir command: two macros blanks macro count local top push cx push ax push dx mov cx, count mov dl,' ' mov ah, 2 top: int 21h loop top pop dx pop ax pop cx endm mygotoxy macro row, col push dx push bx push ax mov dh,row mov dl,col mov bh,0 mov ah,2 int 10h pop ax pop bx pop dx endm

Tabbing for the dir command

Tabbing data area: I made up some strings INCLUDE Irvine16.inc.data row byte 0 col byte 0 s1 byte 'some string',0 s2 byte 'and another',0 s3 byte 'shorty',0 s4 byte 'xyz',0 s5 byte 'bleh blah',0 addresses label word word s1 entry=($-addresses) word s2 word s3 word s4 word s5 numentries=($-addresses)/entry

tabbing call clrscr mov row,0 mov col,0 mov bx, 0 nextword: mygotoxy row,col ;start in upper lh corner mov dx,addresses[bx] mov di,dx call writestring add col, 20 add bx,2 cmp bx,numentries*2 jb checkrow xor bx,bx checkrow: cmp col,65 jb nextword mov col,0 inc row cmp row,24 jb nextword quit: exit main ENDP