我们如何比较8085中的两个2​​字节二进制数?

时间:2013-09-29 17:27:27

标签: assembly 8085

我必须为以下内容编写一个微处理器8085汇编语言代码: -

6个国家的人口普查存储在从2400H / 0C20H开始的18个地点。第一个字节是代码编号(可以是00H到05H),接下来的2个字节是二进制国家/地区(因此每个国家占用3个位置)。我必须找到人口最多的国家,并将其国家代码编号存储在2500H / 0C90H位置。

我在互联网上搜索但是找不到我们如何比较8085中的两个2​​字节二进制数?如果你能提供帮助,我将非常感激。

3 个答案:

答案 0 :(得分:0)

在8位CPU上,比较第一个(=最高)字节。如果它相等,则比较第二个(=较低)字节。比较32位或64位数字时,继续使用第三个字节,依此类推。当字节不相等时,你停止比较。

在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”等说明!

签名号码比较更难!

答案 1 :(得分: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

谢谢大家的回答!! :)

答案 2 :(得分:0)

mvi a, 1st no.  
mvi b, 2nd no.  
cmp b  
jc go   
mov a,b  
go: sta 0020h  
hlt