Solved

8086 Assembly Language - Help writing a program

Posted on 2004-04-03
15
1,270 Views
Last Modified: 2008-03-03
I am using DEBUG through MS-DOS to make and run a certain program.
I need to write a program through DEBUG that will do the following:

1. Input two one digit numbers from keyboard [A and B]
2. Compare the numbers and display "First Larger" or "Second Larger"
3. Add the numbers and display the sum
4. Subtract the smaller from the larger and display the difference
5. Multiply the numbers and display the product
6. Divide the larger number by the smaller and display the quotient..

Now my knowledge of assembly language is very limited, I havent taken a class to learn it yet.
I know how to do the basic things like MOV, ADD, SUB but when it comes to inputting something from the keyboard, storing it, comparing the numbers I am completely clueless...

I have tried searching for help online but it wasnt much help because like I said, I havent had any assembly language  classes. The class that I am taking now is Intel Microprocessor Fundamentals and it only teaches about how microprocessor works, memory, registers, basic assembly commands, addresses, etc...but it doesnt show you how to program anything using assembly.

I really need help with constructing this program.

Thanks in advance
0
Comment
Question by:webzila
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 7
  • 6
15 Comments
 
LVL 8

Expert Comment

by:manish_regmi
ID: 10751054
hi,
 You can use this link to study assembly in detail.
http://cs.smith.edu/~thiebaut/ArtOfAssembly/artofasm.html

to input digits you can use
int 0x21 ah=01
the value will be in the al register. It is an ascii code. Subtract 0x30 from it to get the number in decimal.

eg.

mov ah, 01h
int 0x21

mov bl, al
mov ah, 01h
int 0x21

you can use the cmp to compare between two values

cmp al, bl

I cannot give you full codes. first try yourself.
we can help you where you feel difficult.

regards manish.



0
 
LVL 1

Author Comment

by:webzila
ID: 10751189
Thanks for the link. I have been to that site before and had it bookmarked already. That thing is like an entire book that would take months to learn. You cant really just pick out a section out of it and use it unless you know the things that come before it and I dont...

Here is the problem, I havent had an Assembly Language class yet. I am sure it would be much easier if I did and I would be able to follow the instructions and examples. But the class I am is Intel Microprocessors and only gives the basics of architecture, interfacing and just a brief overview of programming. It only explains the basics to get you ready for the actual assembly programming but doesnt put it all together so that you can actually go out and program something...

Yes, this is an assignment for a class. However the instructor and the lab assistant are not on the same page and have never spoken to each other. We are only learning about the basic commands, types of registers, and how to find physical addresses. And now this guy wants an assembly program.

I tried following the examples but its not working. I have only learned how to do very basic things like load a register with something using MOV, subtract/add/divide registers, and other basic functions. I dont even know how to display these outputs on the screen in a program and I am only able to view the values through DEBUG.

I'll try to figure this out again, but I have alraedy tried for a very long time with no success before asking for help here. Are there any working examples that perform what I asked and not just snippets of code that you have to complete because I really dont know how...thats what the assembly programming class is for I guess.
0
 
LVL 1

Author Comment

by:webzila
ID: 10753927
Ok, I found the following program that does part of what I need to do..
http://www.wepin.com/uop/References/assemblyexamples/complete.html

The truth is that I only understand about 10% of the total code in that program..
But anyways, how would I run that in DEBUG. I dont have any assembly compilers...and debug doesnt understand all of those commands in that program..

How would I run that program in DEBUG...is it possible?
0
Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

 
LVL 8

Expert Comment

by:manish_regmi
ID: 10754369
hi,
 I have never used DEBUG for assembly language programming. I don't know how to do it.
You can try NASM. It is a very good assembler and it is free. And also very small file to download.
try it,

http://nasm.sourceforge.net

regards manish.
0
 
LVL 8

Accepted Solution

by:
manish_regmi earned 500 total points
ID: 10754466
hi,
 I recommend you not to use the code in the link you gave because it does direct i/o with the vga.
I can give you a simple nasm example for displaying.

;a simple app
segment data
str db 'hello world',0
 
segment stack
 resb 64

segment code

..start:
mov ax, data
mov ds, ax
mov es, ax

;display a string
mov ah, 0x09
lea dx, [str]
int 0x21

; input a character
mov ah, 01h
int 0x21



regards manish

0
 
LVL 1

Author Comment

by:webzila
ID: 10755083
Ok, this might sound stupid but how do you run NASM
I created a test program called test.asm
Downloaded the NASM package and followed the instructions to install it.
Then when I try to run it all I get is this:

D:\NASM>nasm -f elf test.asm
Exiting due to signal SIGSEGV
General Protection Fault at eip=0002a997
eax=fffd0100 ebx=0000000f ecx=000002a0 edx=fffd0000 esi=00000100 edi=00000005
ebp=0008bec0 esp=0008beb0 program=
cs: sel=01a7  base=02a00000  limit=7d5effff
ds: sel=01af  base=02a00000  limit=7d5effff
es: sel=01af  base=02a00000  limit=7d5effff
fs: sel=017f  base=00006ee0  limit=0000ffff
gs: sel=01bf  base=00000000  limit=ffffffff
ss: sel=01af  base=02a00000  limit=7d5effff

Call frame traceback EIPs:
  0x0002a997
  0x0002a91d
  0x00029bae
  0x00029c65
0
 
LVL 8

Expert Comment

by:manish_regmi
ID: 10755341
hi,
 The code was for dos. U cannot use int 0x21 in linux.
Also u cannot load segment registers in linux.
mov ax, data
mov ds, ax
mov es, ax

Never do this in 32bit os like linux.

Try runnning it dos or windows.

If u want to write assembly programs for linux or other unix. See
www.linuxassembly.org

I dont recommend linux for learning assembly.

Nasm is also available for dos/windows.

regards manish

0
 
LVL 1

Author Comment

by:webzila
ID: 10755365
That was in Windows. I am running Win XP
I went to DOS using cmd
I have NASM in C:\Windows\System32

The thing I posted before was my D drive, and I had the nasm.exe in the NASM folder...

Here is another error

C:\>nasm -f elf test.asm
Exiting due to signal SIGSEGV
General Protection Fault at eip=0002a997
eax=fffd0100 ebx=0000000f ecx=000002a0 edx=fffd0000 esi=00000100 edi=00000005
ebp=0008bec0 esp=0008beb0 program=
cs: sel=01a7  base=02a00000  limit=7d5effff
ds: sel=01af  base=02a00000  limit=7d5effff
es: sel=01af  base=02a00000  limit=7d5effff
fs: sel=017f  base=00006ee0  limit=0000ffff
gs: sel=01bf  base=00000000  limit=ffffffff
ss: sel=01af  base=02a00000  limit=7d5effff

Call frame traceback EIPs:
  0x0002a997
  0x0002a91d
  0x00029bae
  0x00029c65

So in the above example, my program is located on C:\
Trying to run anything using NASM results in that thing you see above...I have never used Linux before :)
0
 
LVL 8

Expert Comment

by:manish_regmi
ID: 10755385
hi,
 It will be best if u write programs for dos.
Make 16 bit applications.
nasm -f obj xyz.c

You will need a linker also. For 16 bit apps you can use tlink(You have this if u have turbo/borland c) or any other linker.
download from here.
http://community.borland.com/article/0,1410,20841,00.html

regards manish

 
0
 
LVL 8

Expert Comment

by:manish_regmi
ID: 10755425
ok,
 So why did you make elf. Elf is format for linux and other unix. For windows make obj and link with a linker.

nasm -f obj -o xyz.obj xyz.asm
tlink xyz.obj

regards manish
0
 
LVL 1

Author Comment

by:webzila
ID: 10757845
Well, like I said I have never done this before..so I was just trying to follow an example and the elf command was listed in the sample (in nasm documentation) and it didnt say if its for Linux or Windows...

I must say that this is too much for me. I dont think I can figure this out just yet. The only thing I ve been doing up till now is basic MOV commands with DEBUG just to see how data moves.

Thanks for trying to help anyways..
0
 
LVL 1

Author Comment

by:webzila
ID: 10772301
manish_regmi thanks for trying to help me.
This assignment was canceled because the instructor realized that we havent learned this at all yet.

So all we did is load 2 registers with any Hex number we want and then compare, subtract, add, divide, and multiply them as seperate operations and simply print out the results which was really easy..

So my code for ADD was something like:
a 100
MOV AL,2
MOV BL,3
ADD AL,BL
MOV AH,02
MOV DL,AL
INT 21
INT 20

and that was good enough.

Thanks
0
 
LVL 1

Author Comment

by:webzila
ID: 11122441
That answer didnt help me at all. None of the answers did. I still tried to give "some" partial points to people who tried to help but did not want to give all the points away due to the fact that I did not get the answer which resolved my problem...
0

Featured Post

On Demand Webinar - Networking for the Cloud Era

This webinar discusses:
-Common barriers companies experience when moving to the cloud
-How SD-WAN changes the way we look at networks
-Best practices customers should employ moving forward with cloud migration
-What happens behind the scenes of SteelConnect’s one-click button

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
C types 14 305
DOS Dongle bypassing 10 1,642
segmentation fault in C Code 13 604
Software clock vs system clock confusion 12 465
This article describes how to import an Outlook PST file to Office 365 using a third party product to avoid Microsoft's Azure command line tool, saving you time.
In this series, we will discuss common questions received as a database Solutions Engineer at Percona. In this role, we speak with a wide array of MySQL and MongoDB users responsible for both extremely large and complex environments to smaller singl…
A short tutorial showing how to set up an email signature in Outlook on the Web (previously known as OWA). For free email signatures designs, visit https://www.mail-signatures.com/articles/signature-templates/?sts=6651 If you want to manage em…
Attackers love to prey on accounts that have privileges. Reducing privileged accounts and protecting privileged accounts therefore is paramount. Users, groups, and service accounts need to be protected to help protect the entire Active Directory …

739 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question