Assembly 基本组件添加(tasm)

Assembly 基本组件添加(tasm),assembly,tasm,Assembly,Tasm,我是汇编新手,我只想把“+”和“=”放在输入之间。对不起,我说的是英语 .model small .stack 100h .data symbol1 db 13,10,"+: $" symbol2 db 13,10,"=: $" .code start: mov ah,1 int 21h mov bl,al int 21h add bl,al sub bl,30h mov ah,2 mov dl,bl int 21h int 20h end st

我是汇编新手,我只想把“+”和“=”放在输入之间。对不起,我说的是英语

.model small
.stack 100h
.data
  symbol1 db 13,10,"+: $"
  symbol2 db 13,10,"=: $"
.code
start:
  mov ah,1
  int 21h

  mov bl,al
  int 21h
  add bl,al
  sub bl,30h
  mov ah,2
  mov dl,bl
  int 21h
  int 20h
end start   

你的想法并不是完全错误,所以让我们稍微调整一下

    mov     ah, 1
    int     21H
    and     al, 15                 ; Mask out high nibble
    mov     bl, al
    ........                       ; Display plus sign
    int     21H
    and     al, 15
    add     bl, ah
    add     bl, 30H
    ..........                     ; Display equal sign
    mov     dl, bl
    mov     ah, 2
    int     21H
    ret
所以,如果你按5,然后按2,你的屏幕可能会像这样,如果你在必要的地方插入适当的代码

5+2=7

根据提示字符串判断您的示例,您需要这样的内容

5
+:2
=:7

不管是哪种方式,无论您希望使用函数2或9使用它发生什么,都必须在省略号处插入该代码。但也有一些问题

  • 如果你没有输入0-9之间的数字呢
  • 如果结果大于10怎么办
  • 如果值的范围大于一个位数,如0-99,该怎么办

  • MS-DOS真实模式,嗯?真正的问题是什么?你不确定该使用什么中断吗?Ralf Brown的中断列表是一个方便的参考,例如,我只想在代码输出上显示+和=符号,那么就显示它们吧?在您的代码中,我看到
    mov-ah,2
    mov-dl,bl
    int-21h
    以显示加法的“结果”,因此您可以以相同的方式输出加载到dl中的任何字符,也可以
    mov-dl,“+”
    。或者,您可以使用
    ah,9
    “打印字符串”服务,检查(另一个链接,如果您不喜欢来自Ove的链接,请保留这两个链接),哪些服务可用,以及如何为它们设置参数。在
    int 21h
    文档中,您可以找到
    ah=09h
    -将字符串写入标准输出