MSDOS 16-bit programming

Slides:



Advertisements
Similar presentations
Link list/file stamps/clusters Odds and ends remaining for test 2.
Advertisements

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.
Assembly Language for x86 Processors 6th Edition Chapter 5: Procedures (c) Pearson Education, All rights reserved. You may modify and copy this slide.
Memory Address Segment-offset address Base location (segment) + logical location (offset) Example: For 32-bits segment-offset address, 08F1:0100 represents.
Writing and reading files. Creating a file on a disk Get a file handle from system Use INT 21H function 3C to create a directory entry for the file Use.
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
MSDOS 16-bit programming Old chpt 13 Current chapt 14.
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.
CS2422 Assembly Language and System Programming Procedures Department of Computer Science National Tsing Hua University.
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, 4 th Edition Chapter 5: Procedures (c) Pearson Education, All rights reserved. You may modify and copy.
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.
Factorial of a number data segment x1 db 4 fact dw ? data ends
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 ;
Sahar Mosleh California State University San MarcosPage 1 Applications of Shift and Rotate Instructions.
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.
CEN 226: Computer Organization & Assembly Language :CSC 225 (Lec#7)
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.
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.
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.
Assembly Language for Intel-Based Computers Chapter 13: 16-Bit MS-DOS Programming Kip R. Irvine.
Assembly Language for Intel-Based Computers, 6th Edition Chapter 5: Procedures (c) Pearson Education, All rights reserved. You may modify and copy.
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.
Computer Organization and Assembly Languages Yung-Yu Chuang 2006/11/13
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.
Assembly Language for Intel-Based Computers, 4 th Edition Chapter 5: Procedures Lecture 18 Linking to External Library The Book’s Link Library Stack Operations.
Irvine, Kip R. Assembly Language for Intel-Based Computers. Chapter 7: Integer Arithmetic Slides to Accompany Assembly Language for Intel-Based Computers,
Procedure Computer Organization and Assembly Languages Yung-Yu Chuang 2005/10/27 with slides by Kip Irvine.
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.
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
1 Chapter 6 Conditional Processing Assembly Language for Intel-Based Computers, 3rd edition Kip R. Irvine.
1st prog! Q: Read a char – from a keyboard & display it at the beginning of the next line! ====== A.
Additional Assembly Programming Concepts
Microprocessor and Assembly Language
Assembly Language Lab (4).
Chapter 4: Instructions
Microprocessor Lab CSL1543 0:0:2
Unit:08 Software Interrupts
By Nasser Halasa Assembly Language.
Presentation transcript:

MSDOS 16-bit programming chpt 13

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 ax,@data 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!

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<secret.txt>message.txt

Encrypt.asm TITLE Encryption Program (Encrypt.asm) ;; read and encrypt a file. Run it from the ; command prompt, using redirection: ; Encrypt < infile.txt > outfile.txt ; Function 6 is also used for output, to avoid ; filtering ASCII control characters. INCLUDE Irvine16.inc XORVAL = 239 ; any value between 0-255 .code main PROC mov ax,@data 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 (< and >) C:\MASM615\EXAMPLES\CH13>encrypt<secret.txt>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 ax,@data 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 cx,LENGTHOF lastName mov dx,OFFSET lastName quit: call Crlf mov dx,offset firstname call writeString call Crlf mov dx,offset lastname

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 123456789 02345678901234567890 22344545566778899 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 ax,@data 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 movzx eax,cx ; year ; Display the time: mov dx,OFFSET str2 mov ah,2Ch ; get system time movzx eax,ch ; hours call WritePaddedDec INVOKE Write,':' movzx eax,cl ; minutes movzx eax,dh ; seconds 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 mov dl,'0' .ENDIF call WriteDec WritePaddedDec ENDP END main

DateTime.asm C:\MASM615\EXAMPLES\CH13>datetime

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 ax,@data mov ds,ax .IF CreateFile EQ 1 call FillTheArray call DisplayTheArray call CreateTheFile call WaitMsg call Crlf .ENDIF call ReadTheFile quit: 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 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. mov eax,1000h ; generate random integers call RandomRange ; between 0 - 999 in EAX mov myArray[si],eax ; store in the array 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 ; 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 000009E2, 000003F6, 00000E87, 00000471, 000001DF, 00000C10, 0000060A, 00000E78, 00000219, 00000072, 000009B4, 00000109, 000001B4, 00000BB0, 000009C9, 00000B59, 00000315, 0000069E, 00000BCE, 00000CDB, 000007DF, 00000C51, 00000E86, 00000944, 000004F6, 00000E1C, 00000DF5, 00000C86, 0000067E, 00000793, 0000075F, 00000ED7, 000003DB, 0000028B, 00000D49, 000008AA, 000003B2, 00000B16, 00000B76, 000006B4, 00000FE6, 0000038A, 00000AEA, 00000DE7, 0000099B, 0000087A, 000005E9, 00000F79, 00000D36, 000004BB, Press any key to continue... 00000D36, 000004BB, 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 ax,@data 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 bx,0 ; read-only mov dx,1 ; open existing file mov si,OFFSET Filename

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 +2 +1 +3

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 ax,@data 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 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 ; Close the file mov ah,3Eh ; function: close file mov bx,inHandle ; input file handle int 21h ; call MS-DOS

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 ; 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 345 6778 1222 4445

Findfirst…findnext: dir

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 ax,@data 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 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 bx mov dh,row mov dl,col mov bh,0 mov ah,2 int 10h pop bx

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 inc row cmp row,24 quit: exit main ENDP