微机原理与汇编语言 JMP START 就是一个死循环呗,跳转到START那句,为的是可以多次读取开关的状态。你要是想让这个程序执行一次就退出当然也可以跳转到别的地方,但是你没有定义STOP,就没办法JMP了.我估计你是不是把START这个标号理解成别的什么东西了,在这里START就是个标号,代表那句“MOV DX,01F2H”的地址,没有什么别的意思,并不是你所理解的\"程序开始\".程序写的肯定不对,问题很大,没有原题没法改,最起码你第一次IN之后得把AL保存一下吧,或者每次TEST AL之前重新IN一下,要不AL都让你给改了,你TEST它有什么用啊?之所以说没有原题没法改是因为如下原因:一 不知道开关Ki闭合对应的是0还是1,你的程序把我搞糊涂了.二 不知道你所谓的\"其他情况,不做任何处理\"是 真的什么都不做 还是 让二极管全都不发光三 假设开关闭合为1,那如果开关状态是11111010的话,我是应该让高四位的二极管发光呢还是什么都不做呢?按照我对题目的理解好像应该是让高四位发光,如果这样的话,楼上 zsq0325 同学的程序就有问题了,用CMP是不行的.
微机原理与汇编语言 先判断开关是否完全闭合,如果闭合,灯全亮;在判断开关的高四位闭合还是低4位闭合,高四位闭合则执行HIGH,低四位执行LOWW。ZERO子程序里面加 JMP STOP是因为不需要执行后面的程序。后面判断低高位的STOP 加在主程序里面就行了,节省代码。
微机原理 汇编语言 data segmentbuf1 db 1,3,4,5,7,9n1 equ$-buf1buf2 db 2,4,6,8,10,12n2 equ$-buf2buf3 db n1+n2 dup(0)data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axlea si,buf1lea di,buf2lea bx,buf3mov cx,0;ch->;index for buf1cl->;index for buf21:cmp ch,n1jz$8cmp cl,n2jz$9mov al,[si]cmp al,[di]ja$2jb$3mov[bx],alinc bxinc siinc diinc chinc cljmp$12:mov al,[di]mov[bx],alinc clinc bxinc dijmp$13:mov[bx],alinc chinc bxinc sijmp$18:cmp cl,n2jz$10mov al,[di]mov[bx],alinc bxinc diinc cljmp$89:cmp ch,n1jz$10mov al,[si]mov[bx],alinc siinc bxinc chjmp$910:mov ah,4chint 21hcode endsend start