Beruflich Dokumente
Kultur Dokumente
1/9
5. Questions
5.1 Try to execute the upper procedure using DEBUG program, show all of your details.
5.2 Also try to use either Microsoft Assembler (MASM, and LINK), or turbo assembler to
run the upper procedure.
6. References,
6.1 http://www.emu8086.com, and info@emu8086.com.
6.2 Lab Manual to accompany the 8088 and 8086 Microprocessors, 2ed, Walter A.
Triebel, Avtar Singh (2000).
7. Appendix
TITLE
PAGE
, 132
16
; Bytes to be moved
BLK1ADDR=
100H
BLK2ADDR=
120H
DATASEGADDR=
STACK_SEG
DB
2000H
SEGMENT
STACK 'STACK'
64 DUP (?)
STACK_SEG
ENDS
CODE_SEG
SEGMENT
BLOCK
PROC
'CODE'
FAR
DS
MOV
AX, 0
PUSH
AX
AX, DATASEGADDR
2/9
MOV
DS, AX
SI, BLK1ADDR
MOV
DI, BLK2ADDR
CX, N
AH, [SI]
; Move a byte
[DI], AH
INC
SI
;Update pointers
INC
DI
DEC
CX
JNZ
NXTPT
RET
BLOCK
ENDP
CODE_SEG
ENDS
END
BLOCK
TITLE
, 132
16
; Bytes to be moved
BLK1ADDR=
100H
BLK2ADDR=
120H
DATASEGADDR=
STACK_SEG
SEGMENT
DB
STACK_SEG
ENDS
CODE_SEG
SEGMENT
BLOCK
2000H
PROC
STACK 'STACK'
64 DUP(?)
'CODE'
FAR
ASSUME CS:CODE_SEG,SS:STACK_SEG
3/9
DS
MOV
AX, 0
PUSH
AX
AX, DATASEGADDR
MOV
DS, AX
SI, BLK1ADDR
MOV
DI, BLK2ADDR
CX, N
AH, [SI]
[DI], AH
INC
SI
DEC
DI
DEC
CX
JNZ
NXTPT
;Update pointers
; Update byte counter
; Repeat for next byte
RET
BLOCK
; Move a byte
CODE_SEG
END
ENDS
BLOCK
,132
SEGMENT
DB
STACK 'STACK'
64 DUP(?)
STACK_SEG
ENDS
DATA_SEG
SEGMENT
'DATA'
TABL1
DB
0FFH,0FEH,0FDH,0FCH,0FBH,0FAH,0F9H,0F8H
TABL2
DB
0AH,0BH,0CH,0DH,0EH,0FH,10H,11H
MEM1
DB
MEM2
DB
DATA_SEG
ENDS
CODE_SEG
SEGMENT
L4P1
'CODE'
PROC FAR
ASSUME
4/9
AX, 0
PUSH AX
; Following code implements Lab 4 Part 1
MOV
AX, DATA_SEG
MOV
DS, AX
MOV
AL, MEM1
MOV
XLAT
TABL1
MOV
MEM1, AL
MOV
AL, MEM2
MOV
XLAT
TABL2
MOV
MEM2, AL
; Translate
RET
L4P1
ENDP
CODE_SEG
END
ENDS
L4P1
, 132
SEGMENT
DB
64 DUP(?)
STACK_SEG
ENDS
DATA_SEG
SEGMENT
NUM1
DB
45H
NUM2
DB
72H
NUM3
DB
DATA_SEG
ENDS
CODE_SEG
SEGMENT
L4P2
STACK 'STACK'
'DATA'
'CODE'
PROC FAR
ASSUME
5/9
AX, 0
PUSH AX
; Following code implements Lab 4 Part 2
MOV
AX, DATA_SEG
MOV
DS, AX
MOV
AL, NUM2
SUB
AL, NUM1
DAS
MOV
RET
L4P2
ENDP
CODE_SEG
END
ENDS
L4P2
TITLE L4 P4
PAGE
STACK_SEG
, 132
SEGMENT
DB
64 DUP (?)
STACK_SEG
ENDS
CODE_SEG
SEGMENT
L4P4
PROC FAR
ASSUME
STACK 'STACK'
'CODE'
AX, 0
PUSH AX
; Following code implements Lab 4 Part 4
MOV
BX, 0AA55H
MOV
CL, 5
SHR
BX, CL
AND
BX, 0F0FH
RET
L4P4
ENDP
CODE_SEG
ENDS
6/9
END
L4P4
proc far
mov ax, @data
mov ds,ax
;******************************
mov si,offset data_old
mov di,offset data_new
mov cx,06h
next:
mov al,[si]
mov [di],al
inc si
inc di
loop next
;******************************
mov ah, 4ch
int 21h
Start
endp
end Start
;******************************
db 'Muhammed Al-Ani'
db 30h dup(20h)
db 15 dup(?)
;******************************
Start
proc far
mov ax, @data
mov ds,ax
;******************************
mov si, offset data_source
mov di, offset data_dest
mov cx,0fh
7/9
next:
mov al,[si]
mov [di],al
inc si
inc di
loop next
;******************************
mov ah, 4ch
int 21h
Start
endp
end Start
;******************************
proc far
mov ax, @data
mov ds, ax
;*******************************
mov cx, 04h
mov bx, 0
mov di, offset data
next:
start
endp
end start
proc far
mov ax, @data
mov ds, ax
8/9
start
endp
end start
;count unmber of ones in a two bytes word , first 97f4, and then 97fa ; using emulator
data dw 97f4h; 1001 0111 1111 0100
count db ?
start
proc far
mov ax, @data
mov ds,ax
sub al,al
mov cx,16
mov bx,data
up:
down: loop up
mov count,al
mov ah, 4ch
int 21h
start
endp
end start
9/9