有许多有限状态机提出的问题,但都与我的问题无关。
我需要5种方法
S0 S1 S2 S3 and read the input
我们从里面开始
S0
我们想打印状态→ 0和输出0→
读取输入首先在ebx中,第二个将在eax中
. If (ebx ==0&&eax==0)
Call S0
.elseif (ebx==1)&&(eax==1)
Call S1
.else
Call S2
.endif
做完整的程序
这是我的代码:这里的问题是输入不起作用。如果我输入00,01,11-
TITLE finite state machine INCLUDE Irvine32.inc E = 13 .data invalidMsg BYTE 'Ivalid input',0 a DWORD ? b DWORD ? count dword ? prompt1 byte 'Enter 0 or 1: ',0 prompt2 byte 'Enter 0 or 1: ',0 num1 byte 'The output is now 1 ',0 num2 byte 'The ouput is now 0',0 num3 byte 'The state is now 0 ',0 num4 byte 'The state is now 1 ',0 num5 byte 'The state is now 2 ',0 num6 byte 'The state is now 3 ',0 .code main PROC call clrscr mov edx,offset prompt1 call writestring call readint mov a,ebx mov edx,offset prompt2 call writestring call readint mov b,eax .if(ebx ==0 && eax == 0) call S0 .elseif(ebx == 1 && eax == 1) call S1 .elseif(ebx == 0 && eax == 1) call S2 .else call S3 .endif exit main ENDP S0 proc mov edx,offset num3 call writestring call crlf mov edx,offset num2 call writestring call readint ret S0 endp S1 proc mov edx,offset num4 call writestring call crlf mov edx,offset num2 call writestring ret S1 endp S2 proc mov edx,offset num5 call writestring call crlf mov edx,offset num1 call writestring call crlf ret S2 endp S3 proc mov edx,offset num6 call writestring call crlf mov edx,offset num1 call writestring ret S3 endp END main
TITLE Finite State Machine (Finite.asm)
; This program implements a finite state machine that
; accepts an integer with an optional leading sign.
INCLUDE Irvine32.inc
ENTER_KEY = 13
.data
InvalidInputMsg BYTE "Invalid input",13,10,0
.code
main PROC
call Clrscr
StateA:
call Getnext ; read next char into AL
cmp al,'+' ; leading + sign?
je StateB ; go to State B
cmp al,'-' ; leading - sign?
je StateB ; go to State B
call IsDigit ; ZF = 1 if AL contains a digit
jz StateC ; go to State C
call DisplayErrorMsg ; invalid input found
jmp Quit
StateB:
call Getnext ; read next char into AL
call IsDigit ; ZF = 1 if AL contains a digit
jz StateC
call DisplayErrorMsg ; invalid input found
jmp Quit
StateC:
call Getnext ; read next char into AL
call IsDigit ; ZF = 1 if AL contains a digit
jz StateC
cmp al,ENTER_KEY ; Enter key pressed?
je Quit ; yes: quit
call DisplayErrorMsg ; no: invalid input found
jmp Quit
Quit:
call WaitMsg
call Crlf
exit
main ENDP
;-----------------------------------------------
Getnext PROC
;
; Reads a character from standard input.
; Receives: nothing
; Returns: AL contains the character
;-----------------------------------------------
call ReadChar ; input from keyboard call WriteChar ; echo on screen
ret
Getnext ENDP
;-----------------------------------------------
DisplayErrorMsg PROC
;
; Displays an error message indicating that
; the input stream contains illegal input.
; Receives: nothing.
; Returns: nothing
;-----------------------------------------------
push edx
mov edx,OFFSET InvalidInputMsg
call WriteString
pop edx
ret
DisplayErrorMsg ENDP
END main
我假设a
和b
是你的状态?所以你把状态存储在那里,但你调用函数在两者之间,所以我假设ebx
在你检查它之前被丢弃了。
call writestring
call readint
mov a,ebx
mov edx,offset prompt2
call writestring
call readint
mov b,eax
因此,在这里,您至少需要将ebx
恢复到,然后才能进行检查(eax已经包含该值)。
mov a, ebx
不确定是否应该
在eax
中,因此您可能还必须交换它们。
xchg eax, ebx
另外,我有点惊讶你调用读音并将
ebx
移动到a
,然后在你再次调用读音
之后,但这次将eax
移动到b
。我认为 readint 返回
eax
中的值,对吧(您没有提供代码)?那么,在第一次调用时,ebx
的值是多少呢?它可能也应该是
mov b, eax
更新
mov edx,offset prompt1
call writestring
call readint
mov a,eax
mov edx,offset prompt2
call writestring
call readint
mov b,eax
mov eax, a
mov ebx, b
为了更加深入理解C语言的本质,我们需要学习一些汇编相关的知识。作为最基本的编程语言之一,汇编语言虽然应用的范围不算很广,但是非常重要。因为它能够完成许多其它语言所无法完成的功能。就拿 Linux 内核来讲,虽然绝大部分代码是用 C 语言编写的,但仍然不可避免地在某些关键地方使用了汇编代码,其中主要是在 linux 的启动部分。由于这部分代码与硬件的关系非常密切,即使是 C 语言也会有些力不从心,而
机器语言 机器语言是指令的集合。 汇编语言 汇编语言的主体是汇编指令。 存储器 随机存储器RAM,可读可写,必须带电存储,关机后存储的内容丢失 只读存储器ROM,只读,关机后其中的内容不丢失 装有 BIOS (基本输入输出设备)的ROM 接口卡上的RAM:显存 外存(storage,磁盘)和内存(memory,主存,高速缓存) 内存地址空间 存储单元:1个字节(byte) 总线 地址总线:CPU是
问题内容: 我知道供应商有自己的原始SQL语言子集,这些子集用C(类似于Postgre SQL)或MS-SQL Server(C ++)等编写。 那么,原始的SQL是用C编写的,还是在Assembly中创建的呢?我真的找不到关于其原始语言根源的明确答案(除了历史等) 问题答案: 在Oracle上进行的快速历史搜索得出: 在70年代后期,Ingres刚开始在加州大学伯克利分校工作时,三个从事CIA合
是否可以在x86汇编语言中模拟if-statment(使用masm语法)?我想在x86汇编语言中做这样的事情,但我不确定应该使用哪个运算符来模拟if-ore语句。我应该使用指令,还是指令,还是其他指令?
程序员用各种编程语言编写指令,有些是计算机直接理解的,有些则需要中间翻译(tranlation)的步骤。如今使用的计算机语言有几百种,可以分为三大类: 机器语言 汇编语言 高级语言 任何计算机只能直接理解本身酌机器语言(machine language)。机器语言是特定计算机的自然语言,由计算机的硬件设计定义。机器语言通常由一系列数字组成(最终简化0和1),让计算机一次一个地执行最基本的操作。机器
《汇编语言》(Assembly Language)是计算机专业中一门重要的基础课程,是一种面向机器的低级语言。它依赖于硬件,能通过巧妙的程序设计充分发挥硬件的潜力。汇编语言程序产生的代码运行效率高。因此,到目前为止,许多软件系统(例如操作系统等)的核心部分仍然用汇编语言来编写。