PDA

View Full Version : مبتدی: سه خطه آخر برنامم ارور داره. اونجایی که end ها رو می نویسیم



Pouri_sb
جمعه 24 دی 1389, 01:48 صبح
سلام
مشکلش از چیه؟ اگه کمکم کنید ممنون میشم :دی
اروریکه می ده رو تو عکس گذاشتم
اینم کده برنامه:


include io.h
;----------------------------------
SSEG SEGMENT PARA PUBLIC 'stack'
DB 64 DUP(0)
SSEG ENDS
;---------------------------------
DSEG SEGMENT PARA PUBLIC 'data'
mes1 DB "Enter number:",'$'
org 20h
data1 db 7,0,7 dup(0ffh)
mes2 DB 0dH,0aH,"Enter number:",'$'
org 80h
data2 db 7,0,7 dup(0ffh)
mes3 DB 0dH,0aH,"resault is: ",'$'
num1 dw 0
num2 dw 0
res db 6 dup(0)
db '','$'
DSEG ENDS
;------------------------------------------
CSEG SEGMENT PARA PUBLIC 'code'
MAIN PROC FAR
ASSUME CS:CSEG, DS:DSEG, SS:SSEG
MOV AX,DSEG
MOV DS,AX
;
mov ah,09h
lea dx,mes1
int 21h
mov ah,0ah
lea dx,data1
int 21h
atoi data1
mov num1,ax
;-------------------------i get the firest number
mov ah,09h
lea dx,mes2
int 21h
mov ah,0ah
lea dx,data2
int 21h
atoi data2
mov num2,ax
;--------------------------i get the 2nd number
mov ah,09h
lea dx,mes3
int 21h
;----------------------------------------------------- i set the screen and now i can calculate it! :D
mov ax,num2
cmp NUM1,AX
;---------------------------i want to find the biger number!
ja End_If
mov ax,num1
mov bx,num2
mov num2,ax
mov num1,bx
End_IF
while cmp num2,0
JE end_while
mov dx,00h
mov ax,num1
mov bx,num2
mov num1,bx
div bx
mov num2,dx
jmp while

;-----------------------------------------------------
end_while itoa res,num1
mov ah,09h
lea dx,res
int 21h
mov ah,01h
int 21h
;
mov ax,4C00H
int 21H
MAIN ENDP
CSEG ENDS
END MAIN

65025

xman_1365_x
یک شنبه 26 دی 1389, 00:52 صبح
با چي داري اسمبلش ميكني ؟
اما يك سري از خطا هاش آخرشه كه ليبل هات : نداره
يكي همون اول تعريف سگمنت كه بايت هست
يا اومدي متغير با متغير مقايسه كردي كه اشتباه هست

Pouri_sb
یک شنبه 26 دی 1389, 19:22 عصر
لیبل ها رو درست کردم درست شد ، اما مقدار res رو نشون نمیده با استفاده از intrupt
اما وقتی intruptها رو با ماکروهای output & inputs نوشتم مشکلی نداشت و جواب رو نشون داد

از tasm و tlink استفاده می کنم

xman_1365_x
دوشنبه 27 دی 1389, 00:04 صبح
اين يك برنامه نمونه 32 بيتي كه با ml32 اسمبل ميشه


; Example assembly language program -- adds two numbers
; Author: R. Detmer
; Date: revised 7/97
.386
.MODEL FLAT
ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD
INCLUDE io.h ; header file for input/output
cr EQU 0dh ; carriage return character
Lf EQU 0ah ; line feed
.STACK 4096 ; reserve 4096-byte stack
.DATA ; reserve storage for data
number1 DWORD ?
number2 DWORD ?
prompt1 BYTE "Enter first number: ", 0
prompt2 BYTE "Enter second number: ", 0
string BYTE 40 DUP (?)
label1 BYTE cr, Lf, "The sum is "
sum BYTE 11 DUP (?)
BYTE cr, Lf, 0
.CODE ; start of main program code
_start:
output prompt1 ; prompt for first number
input string, 40 ; read ASCII characters
atod string ; convert to integer
mov number1, eax ; store in memory
output prompt2 ; repeat for second number
input string, 40
atod string
mov number2, eax

mov eax, number1 ; first number to EAX
add eax, number2 ; add second number
dtoa sum, eax ; convert to ASCII characters
output label1 ; output label and sum
INVOKE ExitProcess, 0 ; exit with return code 0
PUBLIC _start ; make entry point public
END ; end of source code

xman_1365_x
جمعه 15 بهمن 1389, 21:14 عصر
خيلي وقته از اين تاپيك گذشته اصلاحش كردم اما نمي دونم هدف اين كد چيه چون قسمت وايل اشتباه هست.


include io.h
;----------------------------------
SSEG SEGMENT
Dw 64 DUP(0)
SSEG ENDS
;---------------------------------
DSEG SEGMENT
mes1 DB "Enter number:",'$'
org 20h
data1 db 7,0,7 dup(0ffh)
mes2 DB 0dH,0aH,"Enter number:",'$'
org 80h
data2 db 7,0,7 dup(0ffh)
mes3 DB 0dH,0aH,"resault is: ",'$'
num1 dw 0
num2 dw 0
res db 6 dup(0)
db '','$'
DSEG ENDS
;------------------------------------------
CSEG SEGMENT

MAIN PROC FAR
ASSUME CS:CSEG, DS:DSEG, SS:SSEG
MOV AX,DSEG
MOV DS,AX
;
mov ah,09h
lea dx,mes1
int 21h
mov ah,0ah
lea dx,data1
int 21h
atoi data1
mov num1,ax
;-------------------------i get the firest number
mov ah,09h
lea dx,mes2
int 21h
mov ah,0ah
lea dx,data2
int 21h
atoi data2
mov num2,ax
;--------------------------i get the 2nd number
mov ah,09h
lea dx,mes3
int 21h
;-------------------------- i set the screen and now i can calculate it! :D
mov ax,num2
cmp NUM1,AX
;---------------------------i want to find the biger number!
ja End_If1
mov ax,num1
mov bx,num2
mov num2,ax
mov num1,bx
End_IF1:
while1:
cmp num2,0
JE end_while1
mov dx,00h
mov ax,num1
mov bx,num2
mov num1,bx
div bx
mov num2,dx
jmp while1
;-----------------------------------------------------
end_while1: itoa res,num1
mov ah,09h
lea dx,res
int 21h
mov ah,01h
int 21h
;
mov ax,4C00H
int 21H
MAIN ENDP
CSEG ENDS
END MAIN