问题–确定n个元素的数组中的最大数目。 n的值存储在地址2050,数组从地址2051开始。结果存储在地址3050。程序的起始地址为2000。
例子 –
算法 –
- 我们在A中获取数组的第一个元素
- 将A与数组的其他元素进行比较,如果A较小,则将该元素存储在A中,否则与下一个元素进行比较
- A的值就是答案
程序 –
Memory Address | Mnemonics | Comment |
---|---|---|
2000 | LXI H 2050 | H←20, L←50 |
2003 | MOV C, M | C←M |
2004 | DCR C | C←C-01 |
2005 | INX H | HL←HL+0001 |
2006 | MOV A, M | A←M |
2007 | INX H | HL←HL+0001 |
2008 | CMP M | A-M |
2009 | JNC 200D | If Carry Flag=0, goto 200D |
200C | MOV A, M | A←M |
200D | DCR C | C←C-1 |
200E | JNZ 2007 | If Zero Flag=0, goto 2007 |
2011 | STA 3050 | A→3050 |
2014 | HLT |
说明–使用的寄存器: A,H,L,C
- LXI 2050将20分配给H,将50分配给L
- MOV C,M将内存内容(由HL寄存器对指定)复制到C(用作计数器)
- DCR C将C的值减1
- INX H将HL的值增加1。这样做是为了访问下一个内存位置
- MOV A,M将存储器的内容(由HL寄存器对指定)复制到A
- INX H将HL的值增加1。这样做是为了访问下一个内存位置
- CMP M通过从A中减去M来比较A和M。如果AM为负,则进位标志和符号标志将置1。
- 如果进位标志= 0, JNC 200D将程序计数器跳转到200D
- MOV A,M将存储器的内容(由HL寄存器对指定)复制到A
- DCR C将C的值减1
- 如果零标志= 0, JNZ 2007将程序计数器跳转到2007
- STA 3050在3050的存储位置存储A的值
- HLT停止执行程序,并停止任何进一步的执行