bug-nasm提示非法指令,小白求解答

问题描述

nasm提示非法指令,小白求解答

刚学nasm,我捣鼓这个问题半天了,还是没找到bug,跪求解答,要用彩色输出fibonacci函数的值,输入用空格隔开如“12 13 14”,我用getint去获得输入的值,调用fibonacci1去计算,算出来的值用150位长的数组每个数组存一个字符,每次相加由arraybefore加到arraynow再由arraynow加到arraybefore里循环做加法,再用compare函数去选择颜色输出
代码如下
section .text
global main
;Declaring the external functions to be used in the program.......
getint: ;get the index of fibonacci
mov eax,3
mov ebx,0
mov ecx,tem1
mov edx,1
int 80h

mov eax,3
mov ebx,0
mov ecx,tem2
mov edx,1
int 80h
cmp word[tem2],32
je count1
cmp word[tem2],10
je count1

mov eax,3
mov ebx,0
mov ecx,tem3
mov edx,1
int 80h
cmp word[tem3],32
je count10
cmp word[tem3],10
je count10

count10:
sub word[tem1],30h
sub word[tem2],30h
mov ax,word[tem1]
mov dx,10
mul dx
add ax,word[tem2]
mov word[num],ax
call fibonacci1
call compare
cmp word[tem3],10
je exit
jmp getint
count1:
sub word[tem1],30h
mov ax,word[tem1]
mov word[num],ax
call fibonacci1
call compare
cmp word[tem2],10
je exit
jmp getint
ret

compare:
cmp byte[number],1
je print1
cmp byte[number],2
je print2
cmp byte[number],3
je print3
print1:
mov eax,4
mov ebx,1
mov ecx,echo1
mov edx,sizeEcho1
int 80h
add byte[number],1
jmp printfibo1
print2:
mov eax,4
mov ebx,1
mov ecx,echo2
mov edx,sizeEcho2
int 80h
add byte[number],1
jmp printfibo1
print3:
mov eax,4
mov ebx,1
mov ecx,echo3
mov edx,sizeEcho3
int 80h
mov byte[number],1
jmp printfibo1
ret

printfibo1:
pop edx
mov eax,arrayNow
cmp eax,edx
je end
mov eax,arrayBefore
cmp eax,edx
je end
mov al,byte[edx]
mov byte[fibo],al
sub edx,1
push edx
mov eax,4
mov ebx,1
mov ecx,fibo
mov edx,1
int 80h
jmp printfibo1
end:

mov eax,4
mov ebx,1
mov ecx,echoEnd
mov edx,sizeEchoEnd
int 80h
mov ecx,150
mov ebx,arrayNow
mov eax,arrayBefore
recover: ;recover array to init status
mov byte[ebx],-1
add ebx,1
mov byte[eax],-1
add eax,1
loop recover
ret

fibonacci1:
mov cx,word[num]
mov al,0
add al,30h ;integer 0 to char

mov byte[arrayBefore],al ;init arrayBefore[0] = '0'
mov al,1
add al,30h ;integer 1 to char
mov byte[arrayNow],al ;init arrayNow[0] = '1'
add:
cmp cx,0
je print
sub cx,1
cmp byte[record],0 ;the result of add to which array
je nowToBefore
jmp beforeToNow
nowToBefore:
mov ebx,arrayNow
mov edx,arrayBefore
mov byte[record],1
jmp addNumber
beforeToNow:
mov edx,arrayNow
mov ebx,arrayBefore
mov byte[record],0
jmp addNumber
addNumber: ;add index of i of two arrays[i]
mov al,byte[ebx]
cmp al,-1
je add ;jump to the next add
sub al,30h
mov ah,byte[edx]
cmp ah,-1

jne continue
mov ah,0
add ah,30h
continue:

sub ah,30h
add ah,al
add ah,byte[carry1]
cmp ah,10
jnb above10
mov byte[carry1],0
add ah,30h
mov byte[edx],ah
add ebx,1
add edx,1
jmp addNumber
above10:
mov byte[carry1],1
sub ah,10
add ah,30h
mov byte[edx],ah
add ebx,1
add edx,1
cmp byte[ebx],-1
je carry
jmp addNumber
carry:
mov ah,1
add ah,30h
mov byte[edx],ah
jmp add

print: push edx
ret

main:
;Main( ) Function
mov eax, 4
mov ebx, 1
mov ecx, msg1
mov edx, size1
int 80h
call getint

exit:
mov ebx , 0
mov eax, 1
int 80h

section .data
fmt: db "%d",0
msg1: db "Enter Fibonacci numbers:"
size1: equ $-msg1

number: db 0 ;which color to print
echo1: db 1Bh,"[48;32m"
sizeEcho1: equ $-echo1
echo2: db 1Bh,"[48;33m"
sizeEcho2: equ $-echo2
echo3: db 1Bh,"[48;34m"
sizeEcho3: equ $-echo3
echoEnd: db 1Bh,"[0m",10
sizeEchoEnd: equ $-echoEnd
arrayBefore: TIMES 150 db -1 ;init array of all -1
arrayNow: TIMES 150 db -1 ;the same as before
carry1: db 0 ;carry if the result of add two integers
record: db 0 ;record add arrayNow to arayBefore or opp

section .bss
num: resw 1 ;the index of fibonacci
tem1: resw 1
tem2: resw 1
tem3: resw 1
fibo: resb 1 ;as a byte to print

解决方案

http://wenku.baidu.com/link?url=8WUeWvsyv_GPsuDmCTrr5c_waM1ugivgWEdyknMQPmwkkD6vIvLkT6lzBhGw14H5hm-5vDPMPw5VUqwJMF3be-hB1hJmQs45hqKetrCgD6_

时间: 2024-10-22 01:24:33

bug-nasm提示非法指令,小白求解答的相关文章

xml文件-Node节点问题,小白求解答

问题描述 Node节点问题,小白求解答 import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.*; import org.w3c.dom.*; public class Test { /** * 读取XML文件数据 * @param args */ public static void main(String[] args) { try{

小白求解答工资问题

问题描述 如果在公司干了一段时间(比如3年吧),公司给的工资不是很理想,该怎么办 解决方案 解决方案二:1:主要提加工资2:提了没用的话,低调骑驴找马,闪人解决方案三:只要3年不是打酱油过来的,有工作经验了,公司给的价钱不合理,果断跳,不过那需要机遇和运气遇到好公司,一般的公司也比较抠的,解决方案四:不要指望公司能因为自己的坚持发展起来,就算你能力很强,你觉得自己的能力是能让公司发展强大起来的吗?命运掌握在自己手里,像这种情形,我们能做的最切实际的事情就是跳,该选择的时候就果断点吧.还有,一个好

小白求解答DataGrid1_ItemCreated和DataGrid1_ItemDataBound的作用

问题描述 privatevoidDataGrid1_ItemCreated(objectsender,System.Web.UI.WebControls.DataGridItemEventArgse){if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem||e.Item.ItemType==ListItemType.EditItem){TableCellmyTableCell;my

小白求大神解答,怎么在布局文件里让左边的图片和右边的文本框高度一致

问题描述 小白求大神解答,怎么在布局文件里让左边的图片和右边的文本框高度一致 代码如下:<?xml version=""1.0"" encoding=""utf-8""?> android:layout_width=""match_parent"" android:layout_height=""match_parent"" andro

关于java问题-小白求大神指点if语句里变量问题?

问题描述 小白求大神指点if语句里变量问题? i++和++i储存的位置在哪?栈.堆? 解决方案 这是一个无聊的问题参考 http://www.guokr.com/blog/471312/ 解决方案二: 跟存储在哪没有关系,这是存储在栈中的.i++是后缀表达式,就是先取出i的值然后再对 i 进行加1,而++i是前缀表达式,即先将i的值加1在使用. 解决方案三: 首先,i作为普通基础类型的变量,是存在栈中的. 解决方案四: switch语句中在case块里声明变量会遇到提示"Expected exp

表单验证-小白求指教,登录界面简单验证,真心求指教 ,谢谢了

问题描述 小白求指教,登录界面简单验证,真心求指教 ,谢谢了 求登录界面简单验证用户名英文,不许为空,6到10个字节,如果出错直接拦截,并有提示,这几天试了好多volidator,但是都因为这样那样的原因整不明白,真心求答案, 解决方案 <br> //验证英文<br> function verity(obj) {<br> var parent = /^[A-Za-z]+$/;<br> if (parent.test(obj.value)) {<br&g

小白求:java web 异常 处理问题详解

问题描述 小白求:java web 异常 处理问题详解 java web 项目在Dao层产生的异常 提示是在servlce层里面调用时 报nullpoint异常 导致在action层无法正常跳转 我现在 应在在那个层去处理这样的异常 若不再action层的话 我应该怎么操作 小白求大牛告知,感激不敬! 解决方案 先写放测试方法测试service层写的方法有没有对吧,那些要的数据能不能传进去,我个人觉得可能是service的方法有误 解决方案二: 在每一层打个断点,看看是哪里出错了. 解决方案三:

百度地图-小白求帮忙!百度api问题

问题描述 小白求帮忙!百度api问题 最近想试试百度地图api的调用,可是html语言不太熟悉,所以想请问一下各位大神该怎么接受从客户端上传的列表呢...源代码附上:http://developer.baidu.com/map/jsdemo.htm#c1_2 解决方案 问题不明确,你是想在百度地图上加标注,还是想通过百度API获取百度地图数据? 解决方案二: <!DOCTYPE html> <br> body, html,#allmap {width: 100%;height: 1

构造方法 数组-小白求大神解惑!! JAVA带参数构造函数与数组

问题描述 小白求大神解惑!! JAVA带参数构造函数与数组 public class TextInsert { private Object[] ins; private int size; public TextInsert(int size){ ins=new Object[size]; } public static void main(String[] args){ TextInsert list=new TextInsert(2); 我想请问下,这里的list 跟 ins 有什么关系,