Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;Program COMPARES.ASM: Compare two words of data different ways.
- ;
- .MODEL SMALL
- .DATA
- NUM1 DW 25000
- NUM2 DW 26000
- AXMSG DB 'AX equals$'
- BXMSG DB 'BX equals$'
- MSG DB ' '
- TENTHOS DB ?
- THOUS DB ?
- HUNS DB ?
- TENS DB ?
- ONES DB ?
- DB 0DH,0AH,'$'
- IMSG DB 'Instruction: CMP AX,BX',13,10,'$'
- JCTMSG DB 'JC is True',13,10,'$'
- JCFMSG DB 'JC is False',13,10,'$'
- JZTMSG DB 'JZ is True',13,10,'$'
- JZFMSG DB 'JZ is False',13,10,'$'
- JATMSG DB 'JA is True',13,10,'$'
- JAFMSG DB 'JA is False',13,10,'$'
- JLTMSG DB 'JL is True',13,10,'$'
- JLFMSG DB 'JL is False',13,10,'$'
- JETMSG DB 'JE is True',13,10,'$'
- JEFMSG DB 'JE is False',13,10,'$'
- JPETMSG DB 'JPE is True',13,10,'$'
- JPEFMSG DB 'JPE is False',13,10,'$'
- JPOTMSG DB 'JPO is True',13,10,'$'
- JPOFMSG DB 'JPO is False',13,10,'$'
- JGTMSG DB 'JG is True',13,10,'$'
- JGFMSG DB 'JG is False',13,10,'$'
- .CODE
- .STARTUP
- LEA DX,AXMSG ;display AX value
- MOV AH,9
- INT 21H
- MOV AX,NUM1
- CALL BTOD
- LEA DX,MSG
- MOV AH,9
- INT 21H
- LEA DX,BXMSG ;display BX value
- MOV AH,9
- INT 21H
- MOV AX,NUM2
- CALL BTOD
- LEA DX,MSG
- MOV AH,9
- INT 21H
- LEA DX,IMSG ;show 'CMP AX,BX'
- MOV AH,9
- INT 21H
- MOV AX,NUM1 ;start the comparisons
- MOV BX,NUM2
- CALL DOJC
- MOV AX,NUM1
- MOV BX,NUM2
- CALL DOJZ
- MOV AX,NUM1
- MOV BX,NUM2
- CALL DOJA
- MOV AX,NUM1
- MOV BX,NUM2
- CALL DOJL
- MOV AX,NUM1
- MOV BX,NUM2
- CALL DOJE ;1st intruction i added jump if equal
- MOV AX,NUM1
- MOV BX,NUM2
- CALL DOJPE ;2nd instrction jump if even
- MOV AX,NUM1
- MOV BX,NUM2
- CALL DOJPO ;3rd instruction jump if odd
- MOV AX,NUM1
- MOV BX,NUM2
- CALL DOJG ;4th instruction jump if greater
- .EXIT
- DOJC PROC FAR
- CMP AX,BX
- JC JCOK
- LEA DX,JCFMSG
- MOV AH,9
- INT 21H
- RET
- JCOK: LEA DX,JCTMSG
- MOV AH,9
- INT 21H
- RET
- DOJC ENDP
- DOJZ PROC FAR
- CMP AX,BX
- JZ JZOK
- LEA DX,JZFMSG
- MOV AH,9
- INT 21H
- RET
- JZOK: LEA DX,JZTMSG
- MOV AH,9
- INT 21H
- RET
- DOJZ ENDP
- DOJA PROC FAR
- CMP AX,BX
- JA JAOK
- LEA DX,JAFMSG
- MOV AH,9
- INT 21H
- RET
- JAOK: LEA DX,JATMSG
- MOV AH,9
- INT 21H
- RET
- DOJA ENDP
- DOJL PROC FAR
- CMP AX,BX
- JL JLOK
- LEA DX,JLFMSG
- MOV AH,9
- INT 21H
- RET
- JLOK: LEA DX,JLTMSG
- MOV AH,9
- INT 21H
- RET
- DOJL ENDP
- DOJE PROC FAR
- CMP AX,BX
- JE JEOK
- LEA DX,JEFMSG
- MOV AH,9
- INT 21H
- RET
- JEOK: LEA DX,JETMSG
- MOV AH,9
- INT 21H
- RET
- DOJE ENDP
- DOJPE PROC FAR
- CMP AX,BX
- JPE JPEOK
- LEA DX,JPEFMSG
- MOV AH,9
- INT 21H
- RET
- JPEOK: LEA DX,JPETMSG
- MOV AH,9
- INT 21H
- RET
- DOJPE ENDP
- DOJPO PROC FAR
- CMP AX,BX
- JPO JPOOK
- LEA DX,JPOFMSG
- MOV AH,9
- INT 21H
- RET
- JPOOK: LEA DX,JPOTMSG
- MOV AH,9
- INT 21H
- RET
- DOJPO ENDP
- DOJG PROC FAR
- CMP AX,BX
- JG JGOK
- LEA DX,JGFMSG
- MOV AH,9
- INT 21H
- RET
- JGOK: LEA DX,JGTMSG
- MOV AH,9
- INT 21H
- RET
- DOJG ENDP
- BTOD PROC FAR
- SUB DX,DX
- MOV BX,10000
- DIV BX ;get 10,000s digit
- ADD AL,30H
- MOV TENTHOS,AL
- XCHG AX,DX
- SUB DX,DX
- MOV BX,1000 ;get 1,000s digit
- DIV BX
- ADD AL,30H
- MOV THOUS,AL
- XCHG DX,AX
- MOV BL,100
- DIV BL ;get hundreds digit
- ADD AL,30H ;convert into ASCII digit
- MOV HUNS,AL ;and save
- XCHG AL,AH ;get remainder
- SUB AH,AH ;prepare for division by 10
- MOV BL,10
- DIV BL ;get tens digit
- ADD AL,30H ;convert into ASCII digit
- MOV TENS,AL ;and save
- ADD AH,30H ;convert ones digit into ASCII
- MOV ONES,AH ;and save
- RET
- BTOD ENDP
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement