【发布时间】:2014-04-15 22:34:09
【问题描述】:
我用 8086 汇编编写了这个程序,但我可能会遇到一些我不理解的错误。即在第 26 行和第 27 行,我收到错误“Illegal Immediate”,在第 31、37、38、43、44 行,我收到错误“无法转换为指针”。我是这种编程语言的新手,但我认为这些行是有效的。谁能阐明我可能做错了什么?非常感谢。
标题中的标题文件;程序名称 ;------------------------------------------------ ---------------------------------- stacksg segment para stack 'Stack' ;定义堆栈 db 32 dup (0) ;32 字节,可能要设置更大 stacksg 结束 ;------------------------------------------------ ---------------------------------- datasg 段 para 'Data' ;数据段 第一个分贝 0 第二分贝 1 loopit dw 12 datasg 结束 ;------------------------------------------------ ---------------------------------- codeg 段 para 'Code' ; 代码段 main proc far ;主程序 假设 ss:stacksg, ds:datasg, cs:codesg ;定义段寄存器 MOV AL, first ; 将 0 移入 AL MOV AH, second ; 将 1 移入 AH MOV CX,循环;将限制设置为 12(奇偶校验标志) MOV [200],AL ;将 0 移动到内存位置 200 MOV [201],AH ;将 1 移动到内存位置 201 MOV BL,202 ;将 200 移入 BL ADD AH, AL ; 0 和 1 相加,AH 还是 1 MOV [BL],AH ;将 1 移动到内存位置 202 INC BL ;递增 BL,BL 现在是 203 MOV CL,201 ;将 201 移入 CL MOV CH, 202 ;将 202 移入 CH ADD AH,[CL] ;加 1 和 1,AH 现在是 2 MOV [BL], AH ;将 2 移动到内存位置 203(间接通过 BL) INC BL ;递增 BL,BL 现在是 204 循环部分: INC CL ;增量 CL ADD AH,[CL] ;将内存位置 CL 中的内容添加到 AH MOV [BL], AH ; 将 BH 中的内容移动到内存位置(间接通过 BL) INC BL ;递增 BL 十二月 CX ;将 cx 减 1 jnz循环部分 main endp ;程序结束 代码结束 结束主要【问题讨论】:
-
地址不能用bl/cl,可以用bx/cx(不确定cx,可能是bp)
-
bx、si、di和bp(默认为ss:bp)。不是cx(或其他人)。 -
你仍然可以使用
al = [bx + al]和XLAT:) -
干掉那些cmets,它们一点用处都没有!
MOV BL,202 ;moves 200 into BL不正确,INC BL ;increments BL表示流血明显。注释应该解释代码,而不是复制它!