Review of Lab 6

advertisement
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 ‘0’ (30h) to the screen using the DOS
single character Int 21h function 2.
– The 8-bit value E6h (1110 0110) would have
31h,31h,31h,30h,30h,31h,31h,30h
Hex Number Output
• To display the 8-bit value E6h as a HEX
number, the ASCII codes for ‘E’(45h) and
‘6’(36h) would be sent using Int 21h,
function 2.
Procedure to Display Hex Digit
Input: AL
• Clear upper 4-bits of AL (should only have values
0-F)
• Check AL for 0-9 (CMP AL,9)
– (Add AL,30h if 0-9)
• Must be Char if above 9
– (Add AL, 37h if char; 37h + 10d = 41h(‘A’))
• Use Int21h, function 2 to display char (DL holds
char)
Procedure to Display 1 Hex Digit
Input: AL
Out1hex
proc
And
Cmp
Ja
Add
Jmp
Ischar: add
Printit: Mov
Mov
Int
Ret
Out1hex
endp
al,0fh
al,9
ischar
al,30h
printit
al,37h
dl,al
ah,2
21h
;only want lower 4 bits of AL
;is 4 bit value above 9?
;convert to ascii digit '0' to '9'
;convert to ascii digit 'A' to 'F'
;print it using DOS single char output
Procedure for CRLF
• Use Int 21h, function 2 to display ASCII values
for CR (0Dh), LF (0Ah).
Pcrlf
Pcrlf
proc
Mov
Mov
Int
Mov
Mov
Int
Ret
endp
;print carriage return/line feed
dl,0Dh ;carriage return
ah,2 ;function # goes into AH
21h
;print it
dl,0Ah ;line feed
ah,2 ;function #
21h
Irvine Library Procedures
• Writeint – writes an unsigned 16-bit integer
to standard output in ASCII binary, decimal,
octal, or hexadecimal format. Input:
AX=integer, BX=radix(2,8,10,or 16)
• Writeint_signed – writes a 16-bit integer to
standard output in signed decimal ASCII
format. Input: AX=integer.
Irvine Library Procedures
• Writelong - writes an unsigned 32-bit integer to
standard output in ASCII binary, decimal, octal, or
hexadecimal format. Input: EAX=integer,
BX=radix(2,8,10,or 16)
• Writebcd – writes an 8-bit binary coded decimal
byte to standard output. Input: AL=byte.
• Crlf – Writes a carriage return and line feed to
standard output.
Irvine Library Procedures
• Clrscr – Clears the screen and locates the cursor at
the upper left corner. No input. Works only on
video page 0, and only in text mode.
• Writestring – Writes a null terminated string to
standard output. Input: DX points to the string.
• Readint – Reads a signed ASCII decimal string
from standard input and stores it as a 16-bit binary
integer. Input: none. Output: AX contains the
value.
Changing Model Size
• Using a small model size requires that procedures
must be within the code segment (within 256
bytes). Therefore only the offset address is needed
in the call instruction.
• Using a Medium model size allows larger
differences in placement of procedures. Therefore
the value of CS must also be saved when going to
the procedure. CS and IP are both pushed onto the
stack.
Lab6A- Question C
• Writing 16 different characters (0-F) as a
most significant digit and 16 different
characters as a least significant digit results
in a total of 256 different values. Want to
have two loops with the inner loop changing
the LSD and the outer loop changing the
MSD. Can use a shr instruction to get upper
4 bits into lower 4 bits.
Lab 6B – Using Irvine Library
Procedures to Display Integers in
Different Bases
• Writeint uses BX to determine desired radix.
–
–
–
–
–
BX=2
BX=8
BX=10
BX=16
AX=integer
;display in binary
;display in octal
;display in decimal
;display in hex
• Writeint_signed displays signed 16-bit value as a
signed decimal ASCII format.
More on Lab6B – Irvine Libraries
• Note that with Writestring, strings can
finally be null-terminated. (much more
common than DOS ‘$’)
• What is maximum value that can be
represented with 16 bits using 2’s
complement format (216 = ?)
More on Lab6B – Irvine Libraries
• What directive is needed to access the
Irvine libraries?
– Extrn Clrscr:proc, Crlf:proc, Readint:proc
• When linking must have complete path of
irvine libraries unless the irvine.lib is the
current directory.
Unsigned Decimal Number Output
• To display the 8-bit value E6h as an
unsigned decimal number, first a conversion
must occur.
– E6h = (14*16)+6=230(decimal)
• The ASCII codes for ‘2’(32h), ‘3’(33h),
‘0’(30h) would be sent using Int21h,
function 2.
Signed Decimal Number Output
• To display the 8-bit value E6h as a signed
decimal number (2s complement
representation), first a conversion must
occur.
– E6h = 11100110b = -1Ah= -26(decimal)
• The ASCII codes for ‘-’(2Dh),‘2’(32h),
‘6’(36h), would be sent using Int21h,
function 2.
Lab6C – Number Input
• Uses Irvine library procedure to Writestring
to output.
• Uses Readstring to read in data as a string
• Readstring – Reads a string of characters
from standard output and stores them in a
null terminated string. Input: DX=string
pointer. CX= maximum string count.
Output: AX=number of characters typed.
Lab 6C- What to do?
• Call to dec2hex has BX pointing to ASCII
string. Expects converted results in AX.
• Each string is 2 bytes long (excluding null
char). First byte is ASCII representation of
MSD. Second byte is LSD.
Procedure for Lab6C-Question 4
• Subtract 30h to convert from ASCII to
decimal.
• Multiply by 10.
• Save value
• Put LSD in AL. Subtract 30h to convert
• Add value to 10s value.
Download