SSMP Lab Rec Final
SSMP Lab Rec Final
PROGRAM
ASSUME CS:CODE,DS:DATA
DATA SEGMENT
msg1 DB "Hello GEC SKPM$"
DATA ENDS
CODE SEGMENT
START:
MOV AX,DATA
MOV DS,AX
MOV AH,09H
MOV DX,OFFSET msg1
INT 21H
CODE ENDS
END START
OUTPUT
C:\FIRST
ASSUME CS:CODE,DS:DATA
DATA SEGMENT
msg1 DB 'Enter your string: $'
msg2 DB 'The string is : $' OUTPUT
str1 DB 50 DUP (?) ========
DATA SEGMENT
msg1 DB 'ENTER YOUR STRING : $'
msg2 DB 'THE REVERSED STRING IS: $'
str1 DB 50 DUP(?)
DATA ENDS
CODE SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV DX, OFFSET msg1
CALL displaystr
MOV DI, OFFSET str1
CALL readstr
CALL reverse_str
MOV DX, OFFSET msg2
CALL displaystr
MOV DX, OFFSET str1
CALL displaystr
MOV AH, 4CH
INT 21H
readstr_back1:
MOV AH, 01H
INT 21H
MOV [DI], AL
INC DI
CMP AL, 0DH ; Check for Enter key (Carriage Return)
JNE readstr_back1
DEC DI
MOV AL, '$'
MOV [DI], AL ; End the string with '$'
POP DI
POP AX
RET
readstr ENDP
length:
CMP BYTE PTR [SI + CX], '$' ; Find the end of the string
JE start_reverse
INC CX
JMP length
start_reverse:
DEC CX
MOV DI, OFFSET str1
MOV BX, CX ; Set BX to the end of the string (length - 1)
reverse_loop:
CMP DI, BX ; Check if pointers have crossed
JAE done_reverse
done_reverse:
POP BX
POP SI
RET
reverse_str ENDP
CODE ENDS
END START
OUTPUT
========
DATA SEGMENT
msg1 db 'Enter the limit : $'
msg2 db 'Enter the numbers : $'
msg3 db 'THE SUM IS: $'
newline db 10, 13, '$'
limit DW ?
num_list DW 50 DUP(?)
sum DW 0
DATA ENDS
CODE SEGMENT
START:
MOV AX, DATA
MOV DS, AX
back1:
CALL readnum
MOV [DI], AX ; Store numbers to the array num_list
ADD DI, 2
LOOP back1
back2:
MOV AX, [SI]
ADD sum, AX ; Accumulate sum
ADD SI, 2
LOOP back2
; Print newline
CALL printnewline
; Exit to DOS
MOV AH, 4CH
INT 21H
displaynum_back1:
MOV DX, 0
DIV BX ; digit = num % 10
PUSH DX ; num = num / 10, push digit
INC CX ; count = count + 1
CMP AX, 0 ; if num > 0, go back to displaynum_back1
JNE displaynum_back1
displaynum_back2:
POP DX ; pop digit
ADD DL, 30H ; convert to ASCII
MOV AH, 02H ; display
INT 21H
LOOP displaynum_back2
POP DX ; Restore registers
POP CX
POP BX
POP AX
RET
displaynum ENDP
readnum_back1:
MOV AH, 01H ; read a single character
INT 21H
CMP AL, '0'
JB readnum_last
CMP AL, '9'
JA readnum_last
SUB AL, 30H ; convert to digit
PUSH AX
MOV AX, BX
MUL CX
MOV BX, AX ; NUM <-- NUM x 10
POP AX
MOV AH, 0
ADD BX, AX ; NUM <-- NUM + digit
JMP readnum_back1
readnum_last:
MOV AX, BX
POP CX ; Restore registers
POP BX
RET
readnum ENDP
CODE ENDS
END START
OUTPUT
========
DATA SEGMENT
msg1 db 'Enter the limit : $'
msg2 db 'Enter the numbers : $'
msg3 db 'Enter the number to search : $'
msg4 db 'Number found $'
msg5 db 'Number Not Found $'
newline db 10, 13, '$'
limit DW ?
num_list DW 50 DUP(?)
target DW ?
DATA ENDS
CODE SEGMENT
START:
MOV AX, DATA
MOV DS, AX ; Set DS to the data segment
back1:
CALL readnum
MOV [DI], AX ; Store the number in num_list
ADD DI, 2
LOOP back1
search_loop:
MOV AX, [SI]
CMP AX, target
JE found ; If found, jump to found label
ADD SI, 2
LOOP search_loop
found:
; If found, display "Number found"
MOV DX, OFFSET msg4
CALL printmsg
end_search:
CALL printnewline ; Print newline
MOV AH, 4CH
INT 21H ; Exit to DOS
readnum_back1:
MOV AH, 01H
INT 21H
CMP AL, '0'
JB readnum_last
CMP AL, '9'
JA readnum_last
SUB AL, 30H
PUSH AX
MOV AX, BX
MUL CX
MOV BX, AX
POP AX
MOV AH, 0
ADD BX, AX
JMP readnum_back1
readnum_last:
MOV AX, BX
POP CX
POP BX
RET
readnum ENDP
CODE ENDS
END START
OUTPUT
=========
Enter the limit :5
Enter the numbers :2 6 1 4 8
Enter the number to search :6
Number found
=======================================================================
INFINITE ROTATION
PROGRAM
MOV AL,80
OUT 86,AL
back:
MOV AL,09
OUT 84,AL
CALL 3500
MOV AL,0C
OUT 84,AL INPUT
CALL 3500 ========
MOV AL,06
OUT 84,AL 0000:4000 FF
CALL 3500
MOV AL,03 OUTPUT
OUT 84,AL ==========
CALL 3500 MOTOR ROTATED CLOCKWISE
JMP back INFINETLY
HLT
MOV AL,80
OUT 86,AL
MOV CX,04
back:
MOV AL,09
OUT 84,AL
CALL 3500
MOV AL,0C
OUT 84,AL INPUT
CALL 3500 =======
0000:4000 FF
MOV AL,06
OUT 84,AL OUTPUT
CALL 3500 ========
DEC CX
JNZ back
MOV AL,09
OUT 84,AL
CALL 3500
MOV AL,0C
OUT 84,AL
CALL 3500
HLT
MOV AL,80
OUT 86,AL
back:
MOV AL,03
OUT 84,AL
CALL 3500
MOV AL,06
OUT 84,AL INPUT
CALL 3500 ========
MOV AL,0C
OUT 84,AL 0000:4000 FF
CALL 3500
MOV AL,09 OUTPUT
OUT 84,AL ==========
CALL 3500 MOTOR ROTATED ANTICLOCKWISE
JMP back INFINETLY
HLT