DATA SEGMENT
TABLESQ DB 0,1,4,9,16,25,36,49,
DB 64,81,100,121,144,169,196,225
XX DB X ;X为0~15的正整数
YY DB ?
DATA ENDS
STACK SEGMENT PARA STACK’STACK’
DB 50 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUMECS: CS:CODE,DS:DATA,SS:STACK
BEGIN: MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET TABLESQ
MOV AH,0
MOV AL,XX
ADD BX,AX
MOV AL,[BX]
MOV YY,AL
MOV AH,4CH
INT 21H
Code ends
; 数据段
DATA SEGMENT
TABLESQ DB 0,1,4,9,16,25,36,49, ; 8个字节
DB 64,81,100,121,144,169,196,225 ; 8个字节,所以tablesq一共16个字节
XX DB X ;X为0~15的正整数
YY DB ?
DATA ENDS
; 栈段
STACK SEGMENT PARA STACK’STACK’
DB 50 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUMECS: CS:CODE,DS:DATA,SS:STACK
BEGIN:
MOV AX,DATA ; 以下两句载入数据段data
MOV DS,AX
MOV BX,OFFSET TABLESQ ; 把tabelsq的数据段偏移地址送入BX
MOV AH,0 ; ah = 0
MOV AL,XX ; al = xx
ADD BX,AX ; bx = bx + ax,由于bx存的是tablesq的基地址,ax里存的xx是一个0~15的正数,所以相加后bx的值是tablesq+xx处的地址
MOV AL,[BX] ; 把这个地址里存储的字节送入al
MOV YY,AL ; 把al存入yy字节单元
MOV AH,4CH ; 程序到此结束
INT 21H
Code ends