首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

cpu遇到非法指令 求大神解答啊该怎么解决

2012-04-13 
cpu遇到非法指令 求大神解答啊代码如下date segmentarr db 20 dup(?)pr1 db please input the word:$dat

cpu遇到非法指令 求大神解答啊
代码如下

date segment
arr db 20 dup(?)
pr1 db 'please input the word:$'
date ends
stack segment stack
db 100 dup(?)
stack ends
code segment
assume cs:code,ds:date,ss:stack
start:
  mov ax,date
  mov ds,ax
  lea si,pr1

lo: ;输出开始字符
  mov cl,[si]
  call printf
  inc si
  mov ch,'$'
  cmp [si],ch
  jne lo
   
  mov cl,0ah
  call printf

  lea si,arr
  mov bh,'a'
  sub bh,'0'
   
  call input
  mov [si],al

lo1: ;输入字符
  inc si
  call input
  mov [si],al
  cmp [si],bh
  jne lo1

  mov cl,0ah
  call printf

  mov bl,0
  lea si,arr
lo2: ;寻找奇数
   
  mov ch,01h
  mov dh,[si]
  and dh,ch
  je sum
  inc bl 
 sum:inc si
  cmp [si],bh
  jne lo2

 
mov al,bl
call printf

mov ax,4ch
int 21h  

input proc 
  mov ah,01h
  int 21h
  sub al,'0'
  ret
input endp 
   
printf proc
  push cx
  mov dl,cl
  mov ah,02h
  int 21h
  pop cx
  ret
printf endp
code ends
end start

在谈到tddebug中正常 但是在dos中执行时 就抱错

[解决办法]
主要问题是程序最后的结束功能调用应该是 mov ah, 4ch 吧,而不是 mov ax,4ch ,这是笔误吧。
另外,输出统计结果是,应先将数值转换为相应的字符;并且,printf 子程待输出的字符是在 cl 而非 al 中。
[解决办法]
......
mov al,bl
call printf

mov ax,4c00h把这句改成:4c00h试一试.
int 21h
......

热点排行