在emu8086中通过减法除以两个数字

时间:2016-10-13 04:18:48

标签: assembly emu8086

问题是"正如可以通过相加和相加来增加,可以通过一次又一次地减去来进行除法。编写一个程序,用一个程序计算一个数字N1进入另一个数字N2的次数。您将需要一个循环,并计算该循环执行的次数"。我真的陷入了减法阶段。我知道我必须创建一个循环,但我不知道在哪里放置它。

org 100h

.MODEL SMALL
.STACK 100H
.DATA

MSG1 DB 'FIRST > $'
MSG2 DB 'SECOND > $'
MSG3 DB 'THE SUBTRACTION OF '
VALUE1 DB ?
MSG4 DB ' AND '


VALUE2 DB ?, ' IS '

SUM DB ?,'.$'

CR DB 0DH, 0AH, '$'

.CODE
MAIN PROC
;INITIALIZE DS
MOV AX, @DATA
MOV DS, AX 
;PROMPT FOR FIRST INPUT
LEA DX, MSG1
MOV AH, 9H
INT 21H
MOV AH, 1H
INT 21H
MOV VALUE1, AL
MOV BH, AL
SUB BH, '0'
;CARRIAGE RETURN FORM FEED
LEA DX, CR
MOV AH, 9H
INT 21H
;PROMPT FOR SECOND INPUT
LEA DX, MSG2
MOV AH, 9H
INT 21H
MOV AH, 1H
INT 21H
MOV VALUE2, AL
MOV BL, AL
SUB BL, '0'
SUBTRACT:
;SUB THE VALUES CONVERT TO CHARACTER AND SAVE
SUB BH, BL
ADD BH, '0'
MOV SUM, BH
;CARRIAGE RETURN FORM FEED
LEA DX, CR
MOV AH, 9H
INT 21H
;OUTPUT THE RESULT
LEA DX, MSG3
MOV AH, 9H
INT 21H


TERMINATE:
;RETURN TO DOS
MOV AH, 4CH
INT 21H
MAIN ENDP
END MAIN

2 个答案:

答案 0 :(得分:1)

正N1,N2的算法:

  1. 准备N1N2并将一些R设置为-1
  2. 增量R
  3. N1中减去N2(用结果更新N2
  4. 当减法结果大于或等于零时,转到步骤2.
  5. R包含整数除法N2 / N1
  6. 的结果

    步骤2.到4.可以用x86汇编每步单指令(sub更新"进行标记",可以用来判断减法是否做了&# 34;溢出" - 由其中一个" Jcc" =跳转条件代码指令用于跳转到其他地方或继续下一条指令。)

答案 1 :(得分:0)

下一个程序完成这项工作。这些数字在数据段中被声明为变量,注释解释了所有内容(只需将其复制粘贴到EMU8086中并运行它):

pd = new ProgressDialog(getActivity());
pd.show();
pd.setContentView(R.layout.custom_progressdialog);
pd.setCancelable(false);

程序" number2string"用于将结果转换为字符串,以防该结果有多个数字。

请注意,不会从键盘捕获数字,被除数(N2)和除数(N1),它们是数据段中的静态值。为了从键盘捕获它们,我们需要另一个过程" string2number",将字符串转换为数字格式。

相关问题