我使用nasm和ld编译了一个名为mymath.asm的.asm文件。使用以下编译命令:
nasm -f elf -o mymath.o mymath.asm ld -melf_i386 -o mymath mymath.o
我的代码如下:
描述:将实现以下数学公式:
; [((x-y)+ z)* p] / [(q)],变量为:x,y,p,q和s。(变量类型为int)
;注意:q不能等于零(除以零)
;变量将被硬编码
;代码以多个步骤实现。
BITS 32
全球_start section .text _开始: mov eax,1;变量x被设置为给定值。 mov ebx,1;变量y被设置为给定值 mov ecx,1;变量z被设置为给定值。 mov edx,1;变量p被设置为给定值。 mov esi,1;变量q被设置为给定值。
call implementation
_out:
mov ebx, eax ; storing the contents of eax in ebx
mov eax, 0x1 ; indicator 0x1 (sys_exit) is being moved to eax
int 0x80 ; kernel interuppter is called using 128bit, code
;Input
; eax, ebx, ecx, edx, esi = values for "(eax-ebx+ecx)*edx/esi"
;
;Output
; eax = result of "(eax-ebx+ecx)*edx/esi"
implementation:
sub eax,ebx ; eax = eax-ebx, (x-y).
add eax,ecx ; eax = eax + ecx (x-y)+z.
imul edx,eax ; edx = edx * eax [(x-y)+z]*p.
mov eax,edx ; copy content of edx into eax.
mov edx,0 ; preparing edx for division instruction.
cmp esi,0 ; comparing esi to 0 (division by zero handling.)
je _out ; jump to _out lable.
idiv esi ; (tutorial slide) edx:eax/esi [((x-y)+z)*p]/[(q)].
ret ; return.
当我尝试使用gdb命令运行它时: gdb mymath (gdb)r 启动程序:/ home / arsaidim / Desktop / CPSC355 / hw3-submission / mymath [Inferior 1(流程4625)退出,代码为01]
是[Inferior 1(进程4625)退出代码01]指示问题或一般错误?