问答题
试编写一个工作在16位空间的486段内调用子程序,实现取16位有符号数x绝对值的操作。要求:
(1)子程序入口地址(标号):ABSX
(2)入口参数:AX=x
(3)出口参数:AX=|x|
另外,再编写一个程序段,利用这个子程序,将数据段内首地址为1000H数据区的100个16位有符号数取绝对值,并将结果存放到数据段内首地址为1100H的数据区中
【正确答案】;16位取绝对值子程序
ABSX: CMP AX,0 ;AX与0比较
JGE PASS ;若AX≥0转PASS
NEG AX ;AX取负(取补)
PASS: RET ;返回
;主程序段
MOV CX,100 ;置循环计数初值
MOV SI,0 ;置下标偏移初值
NEXT: MOV AX,[SI+1000H] ;取一数x
CALL ABSX ;取绝对值|x|
MOV [SI+1100H],AX ;存结果
ADD SI,2 ;调整下标偏移
LOOP NEXT ;CX←CX-1,若CX≠0转NEXT
【答案解析】