;============================================================================= ; sqr.asm ; It is just a plain sqr function! ; Algorithm ; S1: Get the number to be multiplied ; S2: Convert to number in ax ; S3: ;(C)I don't take any responsibility for the use of this program ; Zedr0n -- connection closed ;============================================================================= ;============================================================================= ; .Com declaration ;============================================================================= .MODEL TINY ;============================================================================= ; Data definition/declaration ;============================================================================= .DATA ;----------------------------------------------------------------------------- ; Equals ;----------------------------------------------------------------------------- ;----------------------------------------------------------------------------- ; Constants ;----------------------------------------------------------------------------- SEPAR DW 10000 DW 1000 ; DW 100 ; DW 10 DW 1 ;----------------------------------------------------------------------------- ; File variables ;----------------------------------------------------------------------------- BUFFER DB 4 DB ? ; DB 30,30,30,30 ;----------------------------------------------------------------------------- ; Stack variables ;----------------------------------------------------------------------------- .CODE .386 ORG 100H ;============================================================================= ; Code segment ;============================================================================= START: ; S1: ; MOV AH,0AH ; MOV DX,OFFSET BUFFER ; INT 21H S2: ; CALL CONVERT ; S3: ; MUL AX S4: ; PUSH AX ; MOV AL,0DH ; INT 29H ; MOV AL,0AH ; INT 29H ; POP AX CALL SHOW RET ; ;----------------------------------------------------------------------------- ; Convert ; Convert number in buffer to number in ax ;----------------------------------------------------------------------------- CONVERT PROC ; MOV SI,OFFSET BUFFER+2 MOVZX CX, BYTE PTR [SI-1] LOOP_1: ; XOR AH,AH LODSB SUB AL,30H ; PUSH CX MULT: CMP CX,1 ; JLE CONT IMUL AX,10 ; DEC CX JMP MULT CONT: ADD BX,AX POP CX DEC CX JNZ LOOP_1 XCHG AX,BX RET CONVERT ENDP ;----------------------------------------------------------------------------- ; Show ; Show the result ; S1: Get the first digit ;----------------------------------------------------------------------------- SHOW PROC ; MOV DI,-2 MOV SI,OFFSET SEPAR ; XOR CX,CX @@S1: XOR DX,DX INC DI INC DI MOV BX,SEPAR[DI] CMP AX,BX ; JL @@S1 @@S2: ; INC DX MOV BX,SEPAR[DI] SUB AX,BX ; CMP AX,BX ; JGE @@S2 PUSH AX ; MOV AL,DL ADD AL,30H INT 29H POP AX CMP AX,0 ; JG @@S1 ; MOV CX,8 SUB CX,DI ; JZ @@EXIT @@S3: MOV AL,30H ; INT 29H DEC CX ; DEC CX JNZ @@S3 ; @@EXIT: RET SHOW ENDP END START