milalik
asked on
Assembly questions
QUESTION 1:
I have this program that calculates the factorial of numbers between 0 and 5 including them. The problem I have is that i want to write the final result to the variable called Fact and then print the resukt on screen, but it ain't working. Getting a warning.Here is what i Have:
;factorial of numbers
DATA SEGMENT
MES1 DB "ENTER NUMBER (0<=N<=5): $"
MES2 DB "THE RESULT IS: $"
FACT DB ?
DATA ENDS
STACK SEGMENT
DW 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:
MOV AX,DATA
MOV DS,AX
MOV AH,02H ;making a return
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
MOV AH,09 ;prompt for first number
MOV DX,OFFSET MES1
INT 21H
MOV AH,01 ;input first number
INT 21H
MOV BL,AL
MOV AH,02H ;making a return
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
MOV BH,00H
MOV AX, BX
AAS ;adjust number to be decremented
MOV BX,AX
IF00: CMP BX,00
JNE ONE ;routine for a 0 entry
THEN00: INC BX
MOV AX,1
ONE:
IF01: CMP BX,01 ;check if number is 1
JNE NOT_ONE
THEN01: JMP CALC ;jump to CALC
NOT_ONE: DEC BX
CALC: MUL BX
DEC BX
JNZ CALC
MOV DI,AX
MOV FACT,DI
AAM ;adjust after multiplication
MOV CX,AX
MOV AH,00H
AAM
MOV BX,AX ;BL contains the last digit of the result
MOV AL,CH
MOV AH,00H
AAM
MOV CX,AX ;CX contains the first two digits of the resul
ADD CX, 3030H
ADD BX, 3030H ;adjust ASCII
MOV AH,09 ;output mess2
MOV DX,OFFSET MES2
INT 21H
MOV AH,02
MOV DL,CH
INT 21H
;print most significant digit
MOV AH,02
MOV DL,CL
INT 21H
;print middle digit
MOV AH,02
MOV DL,BL
INT 21H
;print last digit
MOV AH,4CH ;exit dos
INT 21H
CODE ENDS
END START
I have this program that calculates the factorial of numbers between 0 and 5 including them. The problem I have is that i want to write the final result to the variable called Fact and then print the resukt on screen, but it ain't working. Getting a warning.Here is what i Have:
;factorial of numbers
DATA SEGMENT
MES1 DB "ENTER NUMBER (0<=N<=5): $"
MES2 DB "THE RESULT IS: $"
FACT DB ?
DATA ENDS
STACK SEGMENT
DW 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:
MOV AX,DATA
MOV DS,AX
MOV AH,02H ;making a return
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
MOV AH,09 ;prompt for first number
MOV DX,OFFSET MES1
INT 21H
MOV AH,01 ;input first number
INT 21H
MOV BL,AL
MOV AH,02H ;making a return
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
MOV BH,00H
MOV AX, BX
AAS ;adjust number to be decremented
MOV BX,AX
IF00: CMP BX,00
JNE ONE ;routine for a 0 entry
THEN00: INC BX
MOV AX,1
ONE:
IF01: CMP BX,01 ;check if number is 1
JNE NOT_ONE
THEN01: JMP CALC ;jump to CALC
NOT_ONE: DEC BX
CALC: MUL BX
DEC BX
JNZ CALC
MOV DI,AX
MOV FACT,DI
AAM ;adjust after multiplication
MOV CX,AX
MOV AH,00H
AAM
MOV BX,AX ;BL contains the last digit of the result
MOV AL,CH
MOV AH,00H
AAM
MOV CX,AX ;CX contains the first two digits of the resul
ADD CX, 3030H
ADD BX, 3030H ;adjust ASCII
MOV AH,09 ;output mess2
MOV DX,OFFSET MES2
INT 21H
MOV AH,02
MOV DL,CH
INT 21H
;print most significant digit
MOV AH,02
MOV DL,CL
INT 21H
;print middle digit
MOV AH,02
MOV DL,BL
INT 21H
;print last digit
MOV AH,4CH ;exit dos
INT 21H
CODE ENDS
END START
ASKER
Adjusted points from 50 to 70
That is funny looking C++ :-)
->can anyone give me an example of how i deal with 16 bit signed numbers in Assembly. They include negative numbers.
=========================
declare it and use a register as index.
K word ?
WArray sword 0, -1, 2,- 3
mov K 1
;AX := WordAry[K]
mov bx, K
add bx, bx
;Index*2 since this is a word array.
mov ax, WordAry[bx]
Regards
W.Yinan
=========================
declare it and use a register as index.
K word ?
WArray sword 0, -1, 2,- 3
mov K 1
;AX := WordAry[K]
mov bx, K
add bx, bx
;Index*2 since this is a word array.
mov ax, WordAry[bx]
Regards
W.Yinan
ASKER
For the second question, what if i want to enter it from the keyboard?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Is this for the first question or the second one?
Please correct the problem in the first question and provide and exmple that deals with 16 bits signed numbers if you can.
Thanx
Please correct the problem in the first question and provide and exmple that deals with 16 bits signed numbers if you can.
Thanx
ASKER
Adjusted points from 70 to 75
for the first question. I'm not sure what the 2nd question even means. but you are supposed to ask only one question per EE question (unless they are VERY closely related). This is stated within the EE rules.
I've outlined how you can perform the conversion. Do you have any questions about it?
I've outlined how you can perform the conversion. Do you have any questions about it?
ASKER
can anyone give me an example of how i deal with 16 bit signed numbers in Assembly. They include negative numbers. Please provide an example.Trying to do an array with ten signed numbers.
Thanx