*** WARNING L14: INCOMPATIBLE MEMORY MODEL
时间: 2023-11-25 16:51:29 浏览: 147
*** WARNING L14: INCOMPATIBLE MEMORY MODEL是指在编译过程中,使用了不兼容的内存模型。在引用中,编译器提示使用了不兼容的内存模型,具体是在使用usb和usb_req_class模块时,使用了XSMALL内存模型,而这两个模块的内存模型是Tiny。在引用中,建议将内存模型设置为XSMALL,但是在重新编译时,出现了两个未解决的外部符号引用错误。这通常是由于缺少库文件或链接器设置不正确导致的。解决方法是检查库文件是否存在或者重新设置链接器选项。
相关问题
KEIL5 C51编辑器中编译警告*** WARNING L14: INCOMPATIBLE MEMORY MODEL
当您在Keil C51编译器中编译代码时,可能会遇到“*** WARNING L14: INCOMPATIBLE MEMORY MODEL”的警告。这通常表示您的代码中存在一些问题,可能会导致在不同的内存模型下编译时出现错误。这种情况可能会影响到您的代码的正确性和可靠性。
在C51编译器中,内存模型是指程序在运行时使用的内存类型。C51编译器支持多种内存模型,包括小内存模型、中等内存模型和大内存模型等。每种内存模型都有其优点和局限性,应根据程序的要求选择合适的内存模型。
如果您收到“*** WARNING L14: INCOMPATIBLE MEMORY MODEL”警告,则可能是因为您的代码中使用了与所选内存模型不兼容的语句或指令。在这种情况下,您需要检查代码并确定哪些语句或指令可能导致问题。通常,这些语句或指令可能会使用大量内存或使用特定类型的指针。
解决此问题的方法通常是修改代码以符合所选的内存模型,或者更改所选的内存模型以符合代码的要求。如果您不确定如何解决问题,请咨询Keil C51编译器文档或Keil官方支持团队以获取帮助。
DATAS SEGMENT ;此处输入数据段代码 S DB "ahahk$" T DB "ahk$"; NEXT DB 30 DUP(?) my_no DB 'NOT FOUND',13,10,'$' DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV ES,AX MOV DS,AX ;此处输入代码段代码 LEA DI,NEXT MOV AX,0 DEC AX STOSB MOV CX,4 MOV BX,AX;BX:K MOV BP,0;BP:J1 L1: CMP BX,0FFFFH;L1 L2 L3 are the first while JE L2 LEA SI,T[(BX)] LODSB MOV DX,AX LEA SI,T[(BP)] LODSB ;MOV DL,T[(BX)] ;MOV AL,T[(BP)] CMP DX,AX JE L2 JNE L3 L2: INC BP INC BX LEA DI,NEXT[(BP)] MOV AX,BX STOSB DEC CX CMP CX,0 JA L1 JNA L14 L3: INC CX LEA SI,NEXT[(BX)] LODSB MOV AH,AL MOV BX,AX DEC CX CMP CX,0 JA L1 JNA L14 L14:MOV BX,0;BX:i MOV BP,0;BP:j L4: MOV CX,0;L4 are the second while MOV DX,2 CMP BX,5 JB L5 L12:CMP BP,3 JB L6 L13:CMP CX,DX JE L7 JNE L8 L5: MOV CX,1 JMP L12 L6: MOV DX,1 JMP L13 L7: CMP BP,0FFFFH JE L9 LEA SI,S[(BX)] LODSB MOV DX,AX LEA SI,T[(BP)] LODSB CMP DX,AX JE L9 JNE L10 L8: CMP BP,3 JNB L11 LEA DX,my_no MOV AH,09H INT 21H MOV AH,4CH INT 21H L9: INC BX INC BP JMP L4 L10:LEA SI,NEXT[(BP)] LODSB MOV AH,AL MOV BP,AX JMP L4 L11:MOV DX,BX SUB DX,3 ADD DX,030H MOV AH,02H INT 21H MOV AH,4CH INT 21H CODES ENDS END START
好的,以下是对给出的代码的注释:
```
DATAS SEGMENT ;定义数据段
S DB "ahahk$" ;定义字符串S,其中包含6个字符:ahahk$
T DB "ahk$"; ;定义字符串T,其中包含4个字符:ahk$
NEXT DB 30 DUP(?) ;定义NEXT数组,包含30个元素,每个元素都是一个字节,初始值为0
my_no DB 'NOT FOUND',13,10,'$' ;定义字符串my_no,其中包含12个字符:NOT FOUND、回车符、换行符和结束符$
DATAS ENDS ;数据段定义结束
STACKS SEGMENT ;定义堆栈段
STACKS ENDS ;堆栈段定义结束
CODES SEGMENT ;定义代码段
ASSUME CS:CODES,DS:DATAS,SS:STACKS ;指定代码段、数据段、堆栈段的段寄存器
START: ;程序入口
MOV AX,DATAS ;将数据段的起始地址赋值给AX寄存器
MOV ES,AX ;将ES寄存器赋值为数据段的起始地址
MOV DS,AX ;将DS寄存器赋值为数据段的起始地址
;以下是代码段的部分
LEA DI,NEXT ;将NEXT数组的地址赋值给DI寄存器
MOV AX,0 ;将AX寄存器赋值为0
DEC AX ;将AX寄存器的值减1(AX=-1)
STOSB ;将AX寄存器中的值存储到DI指向的地址中
MOV CX,4 ;将CX寄存器赋值为4
MOV BX,AX ;将BX寄存器赋值为AX寄存器中的值(BX=-1)
;第一个while循环
L1:
CMP BX,0FFFFH ;比较BX寄存器中的值是否等于0xFFFF(即-1),若等于则跳转到L2
JE L2
LEA SI,T[(BX)] ;将T数组中的第BX个元素的地址赋值给SI寄存器
LODSB ;将SI指向的地址中的值读取到AL寄存器中,并将SI的值加1
MOV DX,AX ;将AX寄存器中的值赋值给DX寄存器
LEA SI,T[(BP)] ;将T数组中的第BP个元素的地址赋值给SI寄存器
LODSB ;将SI指向的地址中的值读取到AL寄存器中,并将SI的值加1
CMP DX,AX ;比较DX寄存器中的值和AX寄存器中的值是否相等
JE L2 ;若相等,则跳转到L2
JNE L3 ;若不相等,则跳转到L3
;L1的下面还有指令,但是这里缺失了,需要补充完整
;第二个while循环
L4:
MOV CX,0 ;将CX寄存器赋值为0
;L4的下面还有指令,但是这里缺失了,需要补充完整
CODES ENDS ;代码段定义结束
END START ;程序结束
```
希望这样的注释能对您有所帮助。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)