STOP:RET
[解析]1)该程序设计的主体应是一个循环——当输入字符的是小写字母(a ~ z)时,就将其转换为大写字母来显示,此过程循环进行,直到当输入的不是小写字母时,程序结束。
2)输入一个字符的可使用DOS的1号功能实现: MOV AH, 1 INT 21H
该DOS调用执行完后,会将输入的字符的ASCII码值送入AL寄存器。 3)判断输入的是否为小写字母(a ~ z)的方法: CMP AL, ‘a’
JB STOP ;不是小写字母时,转STOP CMP AL, ‘z’
JA STOP ;不是小写字母时,转STOP … ;是小写字母时,将其转换为大写显示 STOP: RET ;不是小写字母时,程序结束
4)小写字母比大写字母的ASCII码值大20H,因此指令 SUB AL, 20H,将使AL中的内容变为大写字母的ASCII码值。
5)输出一个字符的可使用DOS的2号功能实现: MOV DL, AL MOV AH, 2 INT 21H
2.设在内存单元SQTAB首址开始存放了0~15的平方数表。要求用直接查表法编一程序,求出A单元中给定数(<=15=的平方值送B单元保存。 答:DATA SEGMENT
SQTAB DB 0,1,4,9,16,25,36,49,64,81 DB 100,121,144,169,196,225 A DB 12 B DB?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START PROC FAR PUSH DX XOR AX,AX PUSH AX
MOV AX,DATA MOV DS,AX
MOV BX,OFFSET SQTAB MOV AL,A XLAT
MOV B,AL RET
START ENDP CODE ENDS
11
END START
[解析]1)根据题目的要求,应首先建立0~15的平方数表以及A和B单元: SQTAB DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 ;平方数表 DB 100, 121, 144, 169, 196, 225 A DB 12 ;给定数(<=15)
B DB ? ;存放A中数的平方值的结果单元
2)A中给定的数恰好是该数平方值在平方数表中的相对位置,因此,可通过换码指令XLAT来实现从表中求平方值: MOV BX, OFFSET SQTAB MOV AL, A XLAT
12