[질문]MASM611 어셈블 해보신분께 여쭙니다.

nakrlove의 이미지

안녕하세요!
어셈블 공부를 해 볼려구 합니다.
근데 이게 저희가 많이사용하는 C,C++,Java랑 많이 차이가 있다고만 느끼고 있는데
더 어려워 보입니다.

Win Xp에
MASM611을 설치해서 컴파일을 하며

Link에서 항상

C:\temp>masm EX6.ASM
Microsoft (R) MASM Compatibility Driver
Copyright (C) Microsoft Corp 1993. All rights reserved.

Invoking: ML.EXE /I. /Zm /c /Ta EX6.ASM

Microsoft (R) Macro Assembler Version 6.12.7164
Microsoft (R) Segmented Executable Linker Version 5.31.009 Jul 13 1992
Copyright (C) Microsoft Corp 1984-1992. All rights reserved.

Run File [EX6.exe]:
List File [nul.map]:
Libraries [.lib]:
Definitions File [nul.def]:
LINK : warning L4021: no stack segment
LINK : warning L4038: program has no starting address

에러가 발생을 합니다.

XP 처리방식이 틀려서 그런건지 .. ?

그리고 마지막으로 리눅스에서 어셈블을 할수 있다고 들었는데
뭘설치를 해야 하는 지 궁금합니다.

저는 RedHat 9을 설치해서 사용하고 있는중입니다.

어셈블 해보신 고수님들 답변 부탁드려요
꾸벅

익명 사용자의 이미지

일단 소스를 보여 주셔야 ;;; 되지 않을까요? ^^

에러 메시지는 스택 세그먼트가 설정되지 않았고

시작 주소가 없다는 것이구요.

리눅스에서 어셈을 하려면

gas 나 nasm 을 쓰시면 됩니다. ^^

Necromancer의 이미지

첫번째꺼는 스택용으로 쓰는 세그먼트를 지정
안했을때 나타나는 거고요. (스택 세그먼트 지정시는
segment 뒤에 STACK을 붙일겁니다.)

두번째꺼는 프로그램 시작지점을 알려주는 지시어가 있습니다.
그걸 쓰셔야 합니다.
start [label명] 형태였던가
MASM 쓴게 오래전 얘기라서 기억이 안나네요.

warning이라면 실행파일이 나와 있기는 있을 겁니다.
조그마한 프로그램일때는 문제 없을수도 있지만
대형에 다중세그먼트로 가게되면 문제의 소지가 있습니다.

Written By the Black Knight of Destruction

nakrlove의 이미지

에고 !!
소스를 올리지 않았네여
죄송합니다.

MAIN SEGMENT
ASSUME CS:MAIN,DS:MAIN
MOV AX,CS
MOV DS,AX

MOV CX,1
MOV AX,0

LOOP1: ADD AX,CX
INC CX
CMP CX,100
JBE LOOP1
MOV SUM,AX
MOV AH,4CH
INT 21H

SUM DW ?
MAIN ENDS
END

이상입니다.

Linux 를 배워봅시다.

Necromancer의 이미지

제가 말한 바가 맞습니다.

스택 세그먼트를 별도로 추가하시고 (세그먼트는 몇천 바이트
정도 크기로 초기화하지 않은 빈공간만 대충 확보하시면 됩니다)
다음으로는 프로그램의 시작이 되는 지점을 지정하시면
됩니다. 문법은 한번 찾아보세요. 전 MASM 안건든지
오래라서 까먹었군요.

Written By the Black Knight of Destruction

nakrlove의 이미지

Necromancer wrote:
제가 말한 바가 맞습니다.

스택 세그먼트를 별도로 추가하시고 (세그먼트는 몇천 바이트
정도 크기로 초기화하지 않은 빈공간만 대충 확보하시면 됩니다)
다음으로는 프로그램의 시작이 되는 지점을 지정하시면
됩니다. 문법은 한번 찾아보세요. 전 MASM 안건든지
오래라서 까먹었군요.

우선 답변 감사드립니다.
근데 문법은 뭘 찾아야 하는지 모르겠습니다.
정확이 말씀을 드리면 제가 이해를 못하고 있다고 말씀드리는게 빠르겠내여..

쩝 ~~

Linux 를 배워봅시다.

익명 사용자의 이미지

2가지 유형으로 작성하였습니다.

1. 합을 10까지로 줄여서 CodeView로 분석하기 쉽게 하였습니다.
2. 고급문법을 적용하였습니다.
3. masm ver 6.14에서 테스트하였습니다.

.MODEL SMALL
.586
.XMM
.STACK

MAIN PROTO

.DATA
SUM DW ?

.CODE

START:
MOV AX, @DATA
MOV DS, AX
INVOKE MAIN
JMP EXIT

MAIN PROC
MOV CX, 1
MOV AX, 0
MOV SUM, 0

LOOP1:
ADD AX, CX
INC CX
CMP CX, 10
JBE LOOP1
MOV SUM, AX
RET
MAIN ENDP

EXIT:
MOV AH, 4CH
INT 21H

END START
;----------------------------------------------------------

.MODEL SMALL
.586
.XMM
.STACK

MAIN PROTO

.DATA
SUM DW ?

.CODE

START:
MOV AX, @DATA
MOV DS, AX
INVOKE MAIN
JMP EXIT

MAIN PROC
MOV SUM, 0
MOV CX, 10
LOOP1:
ADD SUM, CX
LOOP LOOP1
RET
MAIN ENDP

EXIT:
MOV AH, 4CH
INT 21H

END START

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.