これは私のプログラミング課題です。8086 プログラミング言語で記述されたメソッドを使用して、整数の配列の中で最大のものを見つける必要があります。これは私の試みです:
#include <iostream.h>
#include <conio.h>
int returnLargest(int a[])
{
int max;
asm mov si,offset a
for(int i=0;i<6;i++) //Assuming six numbers in the array...Can be set to a variable 'n' later
{
asm mov ax,[si]
asm mov max,ax
asm inc si
cout<<max<<"\n"; //Just to see what is there in the memory location
}
asm mov si,offset a
asm mov cx,0000h
asm mov dx, [si]
asm mov cx,06h
skip: asm mov si,offset a
asm mov bx,[si]
asm mov max,bx
asm inc si
abc: asm mov bx,max
asm cmp [si],bx
asm jl ok
asm mov bx,[si]
asm mov max,bx
ok: asm loop abc
asm mov ax,max
return max;
}
void main()
{
clrscr();
int n;
int a[]={1,2,3,4,5,6};
n=returnLargest(a);
cout<<n; //Prints the largest
getch();
}
予想される答えは
1 2 3 4 5 6 6.しかし、私が得るのはこれです:
ここで私は座って考えます... 実際にメモリに格納されている配列のインデックス i の値ではないでしょうか? 少なくとも、a[i] が 12 (たとえば) の場合、i 番目のメモリ位置には 12 という数字が書き込まれていると教えられたからです。
または、値がメモリ位置に保存されていない場合、目的のタスクを達成するためにメモリ位置に書き込むにはどうすればよいですか?
また、これらの概念をブラッシュアップするために、ネット/ペーパーバックの資料をリンクしてください。
編集 :
アセンブリ内の同じコードは問題なく動作します...
data segment
a db 01h,02h,03h,04h,05h,06h,'$'
max db ?
data ends
code segment
start:
assume cs:code,ds:data
mov ax,data
mov ds,ax
mov si,offset a
mov cx,0000h
back: mov dl,byte ptr [si]
cmp dl,'$'
je skip
inc cx
inc si
jmp back
skip: mov si,offset a
mov bl,byte ptr[si]
mov max,bl
inc si
abc: mov bl,max
cmp [si],bl
jl ok
mov bl,[si]
mov max,bl
ok: loop abc
mov al,max
int 03h
code ends
end start