0

次のマイクロプロセッサ 8085 アセンブリ言語コードを作成する必要があります。

2400H/0C20Hから始まる18ヶ所に6カ国の国勢調査が格納されています。最初のバイトはコード番号 (00H から 05H の範囲) で、次の 2 バイトはその国の人口を 2 進数で表したものです (それぞれの国が 3 つの場所を占めるようになっています)。人口が最大の国を見つけ、その国コード番号を場所 2500H/0C90H に保存する必要があります。

インターネット全体を検索しましたが、 8085 で 2 つの 2 バイトの 2 進数を比較する方法が見つかりませんでした。お役に立てば幸いです。

4

3 に答える 3

0

友人の助けを借りて最終的に解決しました。ここにあります :-

KickOff 2050H                  ;where to start the program
Org 2050H                      ;where to start the code

lxi sp,23ffH                   ;initializing stack pointer to 23ffH
lxi hl,0000H                   ;resulting population to 00 initially for comparison
shld 2501H                     ;store this poulation (00) to 2501h
lxi hl,2400h                   ;now load the address of start loc of data

mvi c,06h                      ;counter for 6 countries

loop:
     mov d,m                   ;store the index of current country in d register
     inx hl                    ;increase hl pair
     mov b,m                   ;store the first byte of current population in b
     inx hl   
     mov e,m                   ;store the second byte of current population in e
     push hl                   ;push hl pair onto stack for later use
     lxi hl,2501h               
     mov a,b

     cmp m                     ;compare first byte (a-m) will set c=1 if m>a
     jc next                   ;if carry do nothing
     jz next1                  ;if z=1, they are equal so we compare next two bytes
     mov m,a                   ;if current greater than previous value then change values of 2501 and 2502 and also index
     inx hl                     
     mov m,e
     mov a,d
     sta 2500h                 ;ab kitna samjaye, kr lo khud se
     jmp next

next1:
     inx hl
     mov a,e
     cmp m
     jc next
     mov m,e
     dcx hl
     mov m,b
     mov a,d
     sta 2500h

next:
     pop hl
     inx hl
     dcr c
     jnz loop
     hlt

皆様、ご回答ありがとうございます!! :)

于 2013-09-30T19:26:31.213 に答える
0
mvi a, 1st no.  
mvi b, 2nd no.  
cmp b  
jc go   
mov a,b  
go: sta 0020h  
hlt
于 2014-01-17T12:55:59.933 に答える
0

8 ビット CPU では、最初の (= 最上位) バイトを比較します。等しい場合は、2 番目 (= 下位) のバイトを比較します。32 ビットまたは 64 ビットの数値を比較する場合は、3 番目のバイトなどに進みます。バイトが等しくない場合、比較を停止します。

Z80 では、「SBC HL,DE」命令を使用して 16 ビット比較を行うこともできます。ただし、この命令は 8085 にはありません。

8 ビット プロセッサの例:

 LOAD register1, [high byte of A]
 LOAD register2, [high byte of B]
 COMPARE register1, register2
 JUMP_IF_EQUAL was_equal
   // -- This is used for 32- and 64-bit numbers only --
 LOAD register1, [second byte of A]
 LOAD register2, [second byte of B]
 COMPARE register1, register2
 JUMP_IF_EQUAL was_equal
   ...
   // -- --
 LOAD register1, [low byte of A]
 LOAD register2, [low byte of B]
 COMPARE register1, register2
was_equal:
  // Here the status flags are set as if a 16-bit UNSIGNED
  // COMPARE had been done.

「LOAD」などの命令を、プロセッサの正しい命令に置き換えてください。

符号付き数値の比較はより困難です!

于 2013-09-30T07:40:44.440 に答える