乘以/除2.0

时间:2017-05-01 17:57:09

标签: assembly masm

我最近发布了一个关于我一直在努力的多重分割菜单,(再次感谢所有人的投入!),但我最近废弃了该代码,并且在具有汇编语言经验的朋友的帮助下,我知道在工作中我现在有一些我认为更接近最终产品的东西。但是当我终于回到家里把它放在一起时,我意识到他一直在展示我知道哪些与NASM不相符的NASM!我一直在尝试将任何不起作用的位转换为使用在线指南的MASM等效错误。但现在我觉得我已经达到了可以使用一些外界帮助的程度。我得到一些链接器错误LNK2001未解析的外部symbol_WinMainCRTStartup和LNK1120 1未解析的外部。

如果有人可以帮助我排除故障,或者如果其他人的系统可以运行,那么这似乎有效吗?

   TITLE mainmenu

; Description: This program presents a menu that will prompt the user decide whether they wouldd like to multiply or divide. The programs reads the numbers in the range 1 to 100. If an invalid selection is made the program will close.
; Revision date: 4/29/2017
INCLUDE Irvine32.inc


.data

.code

main PROC

; Messages


msg1 db 10,'-Mulitply or Divide Calculator-',10,0

lmsg1 equ $ - msg1

msg2 db 10,'Number 1: ',0

lmsg2 equ $ - msg2

msg3 db 'Number 2: ',0

lmsg3 equ $ - msg3

msg4 db '3. Multiply',10,0

lmsg4 equ $ - msg4

msg5 db '4. Divide',10,0

lmsg5 equ $ - msg5



msg6 db 'Operation: ',0

lmsg6 equ $ - msg6



msg7 db 10,'Result: ',0

lmsg7 equ $ - msg7

msg8 db 10,'Invalid Option',10,0

lmsg8 equ $ - msg8

nlinea db 10,10,0

lnlinea equ $ - nlinea

dw ?


; Spaces reserved for storing the values provided by the user.

opc BYTE ?

num1 byte ?

num2 byte ?

result word ?



_start:



; Print on screen the message 1



mov eax, 4

mov ebx, 1

mov ecx, OFFSET msg1

mov edx, lmsg1

int 80h



; Print on screen the message 2



mov eax, 4

mov ebx, 1

mov ecx,OFFSET msg2

mov edx, lmsg2

int 80h



; We get num1 value.



mov eax, 3

mov ebx, 0

mov ecx, OFFSET num1

mov edx, 2

int 80h



; Print on screen the message 3



mov eax, 4

mov ebx, 1

mov ecx, OFFSET msg3

mov edx, lmsg3

int 80h



; We get num2 value.



mov eax, 3

mov ebx, 0

mov ecx,  OFFSET num2

mov edx, 2

int 80h


; Print on screen the message 4



mov eax, 4

mov ebx, 1

mov ecx, OFFSET msg4

mov edx, lmsg4

int 80h



; Print on screen the message 5



mov eax, 4

mov ebx, 1

mov ecx, OFFSET msg5

mov edx, lmsg5

int 80h



; Print on screen the message 6



mov eax, 4

mov ebx, 1

mov ecx, OFFSET msg6

mov edx, lmsg6

int 80h



; We get the option selected.



mov ebx,0

mov ecx,  OFFSET opc

mov edx,2

mov eax,3

int 80h

mov ah, opc ; Move the selected option to the registry ah

sub ah, '0' ; Convert from ascii to decimal



; We compare the value entered by the user to know what operation to perform.



cmp ah, 1

cmp ah, 2


cmp ah, 3

je multiply

cmp ah, 4

je divide



; If the value entered by the user does not meet any of the above

; conditions then we show an error message and we close the program.



mov eax, 4

mov ebx, 1

mov ecx,  OFFSET msg8

mov edx, lmsg8

int 80h



main ENDP


; We keep the numbers in the registers al and bl



mov al, num1

mov bl, num2



; Convert from ascii to decimal



sub al, '0'

sub bl, '0'




; Print on screen the message 7


multiply PROC





; We store the numbers in registers al and bl



mov al, num1

mov bl, num2



; Convert from ascii to decimal



sub al, '0'

sub bl, '0'



; Multiply. AX = AL x BL



mul bl



; Conversion from decimal to ascii



add ax, '0'



; We move the result



mov result, ax



; Print on screen the message 7



mov eax, 4

mov ebx, 1

mov ecx, OFFSET msg7

mov edx, lmsg7

int 80h



; Print on screen the result



mov eax, 4

mov ebx, 1

mov result, ax

mov edx, 1

int 80h



; We end the program




multiply ENDP



divide PROC





; We store the numbers in registers ax and bx



mov al, num1

mov bl, num2

mov dx, 0

mov ah, 0



; Convert from ascii to decimall



sub al, '0'

sub bl, '0'



; Division. AL = AX / BX



div bl



; Conversion from decimal to ascii



add ax, '0'



; We move the result



mov result, ax



; Print on screen the message 7



mov eax, 4

mov ebx, 1

mov ecx, OFFSET msg7

mov edx, lmsg7

int 80h



; Print on screen the result



mov eax, 4

mov ebx, 1

mov ecx, OFFSET result

mov edx, 1

int 80h



; We end the program



divide ENDP







; Print on screen two new lines



mov eax, 4

mov ebx, 1

mov ecx, OFFSET nlinea

mov edx, lnlinea

int 80h



; End the program



mov eax, 1

mov ebx, 0

int 80h

end

0 个答案:

没有答案