📄 pgm5_2.asm
字号:
; Using Pointer Variables in an Assembly Language Program
;
; This short sample program demonstrates the use of pointers in
; an assembly language program.
;
; Randall Hyde
dseg segment para public 'data'
; Some variables we will access indirectly (using pointers):
J word 0, 0, 0, 0
K word 1, 2, 3, 4
L word 5, 6, 7, 8
; Near pointers are 16-bits wide and hold an offset into the current data
; segment (dseg in this program). Far pointers are 32-bits wide and hold
; a complete segment:offset address. The following type definitions let
; us easily create near and far pointers
nWrdPtr typedef near ptr word
fWrdPtr typedef far ptr word
; Now for the actual pointer variables:
Ptr1 nWrdPtr ?
Ptr2 nWrdPtr K ;Initialize with K's address.
Ptr3 fWrdPtr L ;Initialize with L's segmented adrs.
dseg ends
cseg segment para public 'code'
assume cs:cseg, ds:dseg
Main proc
mov ax, dseg ;These statements are provided by
mov ds, ax ; shell.asm to initialize the
mov es, ax ; segment register.
; Initialize Ptr1 (a near pointer) with the address of the J variable.
lea ax, J
mov Ptr1, ax
; Add the four words in variables J, K, and L together using pointers to
; these variables:
mov bx, Ptr1 ;Get near ptr to J's 1st word.
mov si, Ptr2 ;Get near ptr to K's 1st word.
les di, Ptr3 ;Get far ptr to L's 1st word.
mov ax, ds:[si] ;Get data at K+0.
add ax, es:[di] ;Add in data at L+0.
mov ds:[bx], ax ;Store result to J+0.
add bx, 2 ;Move to J+2.
add si, 2 ;Move to K+2.
add di, 2 ;Move to L+2.
mov ax, ds:[si] ;Get data at K+2.
add ax, es:[di] ;Add in data at L+2.
mov ds:[bx], ax ;Store result to J+2.
add bx, 2 ;Move to J+4.
add si, 2 ;Move to K+4.
add di, 2 ;Move to L+4.
mov ax, ds:[si] ;Get data at K+4.
add ax, es:[di] ;Add in data at L+4.
mov ds:[bx], ax ;Store result to J+4.
add bx, 2 ;Move to J+6.
add si, 2 ;Move to K+6.
add di, 2 ;Move to L+6.
mov ax, ds:[si] ;Get data at K+6.
add ax, es:[di] ;Add in data at L+6.
mov ds:[bx], ax ;Store result to J+6.
Quit: mov ah, 4ch ;Magic number for DOS
int 21h ; to tell this program to quit.
Main endp
cseg ends
sseg segment para stack 'stack'
stk byte 1024 dup ("stack ")
sseg ends
zzzzzzseg segment para public 'zzzzzz'
LastBytes byte 16 dup (?)
zzzzzzseg ends
end Main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -