Working With String and Array Addressing Array and

  • Slides: 18
Download presentation
Working With String and Array (Addressing)

Working With String and Array (Addressing)

Array and String Definition • x db 0, 1, 2, 3, 4, 5, 6,

Array and String Definition • x db 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 • x db size dup(value) – E. g. x db 5 dup(0) • str db ‘Hello world’, ’$’ • str db 10 dup(' '), 'S'

Indirect Addressing Modes • Using pointer registers (BX, SI, DI) to store address (offset)

Indirect Addressing Modes • Using pointer registers (BX, SI, DI) to store address (offset) • These pointer registers assume to use DS by default • Mov al, [bx] • Mov al, [si] • Mov al, [di]

Getting the Address(offset) of an Array and String • Using LEA instruction to get

Getting the Address(offset) of an Array and String • Using LEA instruction to get the array and string address to be stored in one of the pointer registers • E. g. x db 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 – Lea bx, x • E. g. str db ‘Hello world’, ’$’ – Lea di, str

e. g. Print an Array using a loop. model small lop: . data mov

e. g. Print an Array using a loop. model small lop: . data mov ah, 02 h x db 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 mov dl, [si]. code add dl, '0' mov ax, @data int 21 h mov ds, ax lea si, x inc si mov cx, 10 loop lop

e. g. Print an String using a loop. model small. data str 1 db

e. g. Print an String using a loop. model small. data str 1 db 'Hello world', '$‘. code mov ax, @data mov ds, ax lea si, str 1 mov cx, 11 lop: mov ah, 02 h mov dl, [si] int 21 h inc si loop lop

Print a String. model small. data str 1 db ‘Hello world’, ’$’. code mov

Print a String. model small. data str 1 db ‘Hello world’, ’$’. code mov ax, @data mov ds, ax lea dx, str 1 mov ah, 09 int 21 h

Read a String. model small. data str 1 db 10 dup (’ ’). code

Read a String. model small. data str 1 db 10 dup (’ ’). code mov ax, @data mov ds, ax lea dx, str 1 mov ah, 0 Ah int 21 h • Be sure to enter ‘$’ at the end of the string

e. g. searching a letter in a string. model small. data str 1 db

e. g. searching a letter in a string. model small. data str 1 db 'hello world!''$' msg 1 db 13, 10, 'found', '$' msg 2 db 13, 10, 'not found', '$' msg 3 db 'enter a letter: ', '$'. code mov ax, @data mov ds, ax mov ah, 09 h lea dx, msg 3 int 21 h mov ah, 1 int 21 h mov cx, 11 lea bx, str 1 lop: cmp [bx], al je found inc bx loop lop mov lea int jmp ah, 09 h dx, msg 2 21 h endprog found: mov ah, 09 h lea dx, msg 1 int 21 h endprog:

e. g. Copy one string to another. model small mov cl, 12. data mov.

e. g. Copy one string to another. model small mov cl, 12. data mov. String: str 1 db 'hello world', '$' mov dl, [si] str 2 db 15 dup(' ') mov [di], dl. code mov ax, @data inc si mov ds, ax inc di mov es, ax loop mov. String lea si, str 1 lea di, str 2

MOVSB & REP instructions movsb mov [di], [si] inc si inc di rep movsb

MOVSB & REP instructions movsb mov [di], [si] inc si inc di rep movsb lp: movsb loop lp

e. g. compare 2 -strings of equal length. model small. data str 1 db

e. g. compare 2 -strings of equal length. model small. data str 1 db 'assembly', '$' str 2 db 'assembly', '$' msg 1 db 'equal', '$' msg 2 db 'not equal', '$'. code mov ax, @data mov ds, ax mov es, ax lea si, str 1 lea di, str 2 mov cx, 8 cmp. String: mov dl, [si] cmp [di], dl jne notequal inc si inc di loop cmp. String equal: lea mov int jmp dx, msg 1 ah, 09 21 h endprog notequal: lea dx, msg 2 mov ah, 09 int 21 h endprog:

CMPSB & REPE instructions cmpsb cmp [di], [si] inc si inc di repe cmpsb

CMPSB & REPE instructions cmpsb cmp [di], [si] inc si inc di repe cmpsb lp: cmpsb loop lp

e. g. print the binary repetition of a given number. model small. data num

e. g. print the binary repetition of a given number. model small. data num db 07 mask db 10000000 b. code mov ax, @data mov ds, ax mov cx, 8 ; not num ; add num, 1 lop: mov al, num and al, mask jz zero mov dl, '1' jmp print zero: mov dl, '0‘ print: mov ah, 02 h int 21 h shr mask, 1 loop lop

e. g. print out 16 -bit binary representation of an integer. model small. data

e. g. print out 16 -bit binary representation of an integer. model small. data number dw 0 F 95 Ch. code mov ax, @data mov ds, ax mov cl, 16 loop 1: mov ax, number and ax, 8000 h jz print. Zero print. One: mov dl, '1' mov ah, 2 int 21 h jmp update print. Zero: mov dl, '0' mov ah, 2 int 21 h update: shl number, 1 dec cl cmp cl, 0 jg loop 1

e. g. print 4 digits hexadecimal number. model small. data number dw 2 AFCh.

e. g. print 4 digits hexadecimal number. model small. data number dw 2 AFCh. code mov ax, @data mov ds, ax mov cl, 4 Loop 1: mov ax, number and ax, 0 F 000 h mov dl, ah shr dl, 4 cmp dl, 9 jg ABCDEF add dl, 30 h jmp ABCDEF: add print: mov int print dl, 37 h ah, 2 21 h shl number, 4 loop 1

e. g. Convert a String between lowercase and uppercase • To convert from lowercase

e. g. Convert a String between lowercase and uppercase • To convert from lowercase to uppercase and x, 11011111 b = sub x, 32 • To convert from uppercase to lowercase or x, 00100000 b = add x, 32 . model small. data str db "hello world". code mov ax, @data mov ds, ax lea si, str mov cl, 11 loop 1: mov dl, [si] and dl, 11011111 b mov ah, 2 int 21 h inc si Loop loop 1

Questions Consider the following Array: x db 0, 2, 5, 9 Trace the value

Questions Consider the following Array: x db 0, 2, 5, 9 Trace the value that is stored in DL during the execution of the following code: lea si, x mov cx, 4 lop: mov ah, 02 h mov dl, [si] dl = 0 , dl = 2 , dl = 5 , dl = 9 add dl, '0' dl = 30 h , dl = 32 h , dl = 35 h , dl = 39 h int 21 h inc si loop lop