You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于TASM的汇编入门问题:读取两个多位数并比较大小

嘿,刚入门TASM汇编对吧?你已经搞定了读取单个多位数的核心逻辑,这起步超棒!接下来咱们一步步解决读取第二个数、比较大小并输出结果的问题:

核心思路拆解

咱们要做三件事:

  1. 读取第一个数并保存到内存(别一直放寄存器里,留着空间给第二个数)
  2. 读取第二个数同样保存
  3. 比较两个数,根据结果输出对应的提示
完整修改后的代码
.model small
.stack 100h
.data
    ; 定义存储两个数的变量
    num1 db 0
    num2 db 0
    ; 定义输出提示字符串,结尾必须加$(INT 21h 09h功能要求)
    msg_first db 'Enter first number: $'
    msg_second db 0ah,0dh,'Enter second number: $' ; 0ah是换行,0dh是回车
    msg_larger1 db 0ah,0dh,'First number is larger.$'
    msg_larger2 db 0ah,0dh,'Second number is larger.$'
    msg_equal db 0ah,0dh,'Both numbers are equal.$'
.code
start:
    mov ax, @data
    mov ds, ax

    ; 提示输入第一个数
    mov ah, 09h
    lea dx, msg_first
    int 21h

    ; 读取第一个数到num1
    mov bl, 0
scanNum1:
    mov ah, 01h
    int 21h
    cmp al, 13 ; 检测回车
    je readSecondNum
    sub al, 48 ; ASCII转十进制
    mov cl, al
    mov al, bl
    mov dl, 10
    mul dl ; 之前的数*10
    add al, cl ; 加上新输入的数字
    mov bl, al
    jmp scanNum1

readSecondNum:
    ; 保存第一个数到内存
    mov num1, bl

    ; 提示输入第二个数
    mov ah, 09h
    lea dx, msg_second
    int 21h

    ; 读取第二个数到num2
    mov bl, 0
scanNum2:
    mov ah, 01h
    int 21h
    cmp al, 13 ; 检测回车
    je compareNums
    sub al, 48
    mov cl, al
    mov al, bl
    mov dl, 10
    mul dl
    add al, cl
    mov bl, al
    jmp scanNum2

compareNums:
    ; 保存第二个数到内存
    mov num2, bl

    ; 比较两个数
    mov al, num1
    cmp al, num2
    ja printLarger1 ; 如果num1 > num2,跳转到对应输出
    jb printLarger2 ; 如果num1 < num2,跳转到对应输出
    ; 否则就是相等
    mov ah, 09h
    lea dx, msg_equal
    int 21h
    jmp exitProgram

printLarger1:
    mov ah, 09h
    lea dx, msg_larger1
    int 21h
    jmp exitProgram

printLarger2:
    mov ah, 09h
    lea dx, msg_larger2
    int 21h

exitProgram:
    mov ah, 04ch
    int 21h
end start
关键部分解释
  • 存储数字到内存:把读取到的数从寄存器BL存到num1/num2,这样读取第二个数时不会覆盖第一个数的值
  • 输入提示:用INT 21h的09h功能输出字符串,0ah,0dh是回车换行的ASCII码,让输入更清晰
  • 比较逻辑:用cmp al, num2后,根据标志位跳转:
    • ja(Jump Above):无符号数大于时跳转
    • jb(Jump Below):无符号数小于时跳转
  • 字符串输出要求:所有要输出的字符串必须以$结尾,这是DOS中断09h的规定
小提醒

因为咱们用的是8位变量(db),所以输入的数不能超过255,否则会溢出哦!如果需要处理更大的数,就得用16位寄存器(比如AX)和变量(dw)来存储啦。

内容的提问来源于stack exchange,提问作者V.Dum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:33:41