Fork me on GitHub

汇编语言 | 复习月的一道练习题

【例题】

在BUF1和BUF2两个数据区中,各定义有10个带符号字数据,试编制一完整的源程序,求它们对应项的绝对值之和,并将和数存入以SUM为首址的数据区中。  

DATA SEGMENT

BUF1 DW-56,24,54,-1,89,-8……

BUF2 DW45,-23,124,345,-265,……

SUMDW10DUP(0)

DATA ENDS

分析:绝对值如何处理?

 

【分析】

负数在计算机中是以补码形式存储的。如何转成其绝对值呢?使用 neg指令 即可!

DATAS SEGMENT
   BUF1 DW -56,24,54,-1,89,-8,4,56,22,-1
BUF2 DW 45,-23,124,345,-265,-34,-56,-44,33,22
SUM DW 10 DUP(0)
DATAS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV ES,AX
    LEA SI,BUF1
    LEA DI,BUF2
    LEA BX,SUM
    MOV CX,10
 LP:MOV AX,[SI]
  CALL ABS
  MOV DX,AX
  MOV AX,[DI]
  CALL ABS
  ADD AX,DX
  MOV [BX],AX
  
  ADD SI,2
  ADD DI,2
  ADD BX,2
  LOOP LP
  MOV AH,4CH
  INT 21H
  
  ABS PROC NEAR
  OR AX,AX
  JNS OUT1
  NEG AX
  OUT1:RET
  ABS ENDP
  CODES ENDS
 END START

 

 

 

【附:一文一图】

 

posted @ 2017-05-13 17:34  zhouie  阅读(342)  评论(0编辑  收藏  举报