汇编程序地址表怎么做的

时间:2025-03-05 10:33:42 明星趣事

汇编程序中地址表的实现通常涉及以下几个步骤:

定义地址表

在数据段中定义一个地址表,其中每个表项包含一个功能号及其对应的程序入口地址。

例如,在文档中,`ComTab`定义了一个地址表,其中包含5个功能号及其对应的字符串地址。

初始化地址表

在程序启动时,将地址表中的每个表项初始化为相应的程序入口地址。

例如,在文档中,`grade`变量被初始化为90,`ComTab`中的每个元素被初始化为对应的字符串地址。

查找地址表

根据输入的功能号,计算其在地址表中的偏移量。

使用功能号乘以2得到偏移量,然后通过查表得到对应的程序入口地址。

例如,在文档中,通过输入的数字1-7,计算其对应的偏移量,并通过查表跳转到相应的字符串地址。

跳转到程序入口地址

使用查表得到的偏移量,通过间接寻址方式跳转到对应的程序入口地址。

例如,在文档中,通过`jmp a [bx]`指令跳转到相应的字符串地址。

```assembly

; 数据段

DATA SEGMENT

MSG DB 13, 10, "Please input a number: ", 13, 10, "$" ; 提示信息

CONT1 DB 13, 10, 'Monday', 13, 10, '$' ; 星期一

CONT2 DB 13, 10, 'Tuesday', 13, 10, '$' ; 星期二

CONT3 DB 13, 10, 'Wednesday', 13, 10, '$' ; 星期三

CONT4 DB 13, 10, 'Thursday', 13, 10, '$' ; 星期四

CONT5 DB 13, 10, 'Friday', 13, 10, '$' ; 星期五

CONT6 DB 13, 10, 'Saturday', 13, 10, '$' ; 星期六

CONT7 DB 13, 10, 'Sunday', 13, 10, '$' ; 星期日

CONTERR DB 13, 10, 'Error!', 13, 10, '$' ; 错误信息

ADDTAB DW ADD1, ADD2, ADD3, ADD4, ADD5, ADD6, ADD7 ; 地址表

DATA ENDS

; 代码段

CODES SEGMENT

ASSUME CS: CODES, DS: DATA

START:

MOV AX, DATA

MOV DS, AX

INPUT:

LEA DX, MSG

MOV AH, 9

INT 21H

MOV AH, 1

INT 21H

CMP AL, '0'

JB ERR

JZ DONE

CMP AL, '7'

JA ERR

SUB AL, '1'

SHL AL, 1

MOV BL, AL

MOV BH, 0

JMP ADDTAB[BX]

ADD1:

LEA DX, CONT1

JMP PRINT

ADD2:

LEA DX, CONT2

JMP PRINT

ADD3:

LEA DX, CONT3

JMP PRINT

ADD4:

LEA DX, CONT4

JMP PRINT

ADD5:

LEA DX, CONT5

JMP PRINT

ADD6:

LEA DX, CONT6

JMP PRINT

ADD7:

LEA DX, CONT7

JMP PRINT

ERR:

LEA DX, CONTERR

JMP PRINT

PRINT:

MOV AH, 9

INT 21H

DONE:

MOV AH, 4CH

INT 21H

CODES ENDS

```

在这个示例中,`ADDTAB`是一个地址表,包含了7个功能号及其对应的字符串地址。根据输入的数字,程序计算其在地址表中的偏移量,并通过查表跳转到相应的字符串地址进行显示。