鱼C论坛

 找回密码
 立即注册
查看: 979|回复: 5

[汇编作业] dosbox

[复制链接]
发表于 2024-11-12 19:59:06 | 显示全部楼层
这个问题是关于如何在汇编语言中实现多字节运算。下面是一个基于DOSBox(及其内的MASM/TASM)汇编语言的代码示例来实现你的需求:

  1. .MODEL SMALL
  2. .STACK 100H

  3. .DATA
  4. A DB 12H, 34H, 56H, 78H
  5. B DB 12H, 34H, 56H, 78H
  6. C DB 06H, 07H, 08H, 09H
  7. D DB 4 DUP(?)
  8. E DB 3

  9. .CODE
  10. START:
  11.     MOV AX, @DATA
  12.     MOV DS, AX
  13.     MOV ES, AX

  14.     MOV AL, E                     ; 读取 E 的值
  15.     CMP AL, 0
  16.     JG ADDITION                   ; 如果 E > 0,跳转到 ADDITION
  17.     JMP SUBTRACTION               ; 否则跳转到 SUBTRACTION

  18. ADDITION:
  19.     XOR SI, SI                    ; SI 清零,用于 index
  20.     XOR DI, DI                    ; DI 清零,用于 index
  21.     XOR AL, AL                    ; AL 清零,用于存储 CARRY
  22.     XOR AH, AH                    ; AH 清零,用于 CARRY

  23.     ADD_LOOP:
  24.         MOV BL, [A + SI]          ; 读取 A 的字节
  25.         ADD BL, [B + SI]          ; 加上 B 的字节,加上 CARRY(包含在 ADD 中,如果发生进位)
  26.         ADC BL, [C + SI]          ; 加上 C 的字节,加上 CARRY
  27.         MOV [D + DI], BL          ; 存入 D 的字节
  28.         INC SI                    ; SI 增1
  29.         INC DI                    ; DI 增1
  30.         CMP SI, 04H               ; 检查是否处理完所有字节
  31.         JNZ ADD_LOOP

  32.     JMP END_PROGRAM               ; 跳转到程序结束

  33. SUBTRACTION:
  34.     XOR SI, SI                    ; SI 清零,用于 index
  35.     XOR DI, DI                    ; DI 清零,用于 index
  36.     XOR AL, AL                    ; AL 清零,用于存储 BORROW
  37.     XOR AH, AH                    ; AH 清零,用于 BORROW (CARRY的相反)

  38.     SUB_LOOP:
  39.         MOV BL, [A + SI]          ; 读取 A 的字节
  40.         ADD BL, [B + SI]          ; 加上 B 的字节
  41.         SBB BL, [C + SI]          ; 减去 C 的字节,考虑 Borrow
  42.         MOV [D + DI], BL          ; 存入 D 的字节
  43.         INC SI                    ; SI 增1
  44.         INC DI                    ; DI 增1
  45.         CMP SI, 04H               ; 检查是否处理完所有字节
  46.         JNZ SUB_LOOP

  47.     JMP END_PROGRAM               ; 跳转到程序结束

  48. END_PROGRAM:
  49.     MOV AX, 4C00H                 ; 程序结束,返回到 DOS
  50.     INT 21H

  51. END START
复制代码


解释:
1. 初始化数据段。
2. 读取变量E的值,进行比较。如果大于0,跳转到 ADDITION 标签,如否则跳转到 SUBTRACTION 标签。
3. 在 ADDITION 和 SUBTRACTION 过程中,进行多字节加法和减法运算,并将结果存储到 D。

这个代码示例使用了 8086 汇编指令。您可以使用如 DOSBox 及其内的 MASM 或 TASM 汇编器进行编译和测试。希望这个例子能够帮助您理解如何在汇编语言中进行多字节计算。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-11-12 20:08:12 | 显示全部楼层
fish111 发表于 2024-11-12 20:08
dosbox怎么运行这段代码呀?生成了exe文件之后,如何 ...


要在 DOSBox 上运行并测试这段汇编代码,您需要进行以下几个步骤:

1. **安装 DOSBox 和 MASM/TASM**:
   - 如果尚未安装 DOSBox,请下载并安装 DOSBox。
   - 下载并解压 MASM 或 TASM 工具包,并且在 DOSBox 中配置好对应的目录。

2. **编写和编译汇编代码**:
   - 使用记事本或其他文本编辑器将上述汇编代码保存到一个.asm文件中。例如:`program.asm`。
   - 将 `.asm` 文件放置在您将在 DOSBox 中挂载的目录下。

3. **在 DOSBox 中挂载目录**:
   - 启动 DOSBox。
   - 在 DOSBox 中输入以下命令挂载包含您 `.asm` 文件的目录:
   
  1. mount c path_to_your_directory
  2.      c:
复制代码

   - 切换到挂载的目录:`c:`。

4. **编译汇编代码**:
   - 使用 MASM 或 TASM 编译该汇编代码:
   
  1. masm program.asm;  (对于 MASM)
  2.      link program.obj;   (对于 MASM)
复制代码

     或者使用 TASM:
   
  1. tasm program.asm  (对于 TASM)
  2.      tlink program.obj (对于 TASM)
复制代码


5. **运行编译后的可执行文件**:
   - 编译成功后,在 DOSBox 中运行生成的`.exe`文件:
   
  1. program.exe
复制代码


6. **查看结果**:
   - 要在程序执行完后查看结果,您可以在汇编代码中追加一段代码将内存中的值(比如D的值)输出到屏幕上。对于这种工作,可以使用 `int 21h` 来显示结果。例如,将 D 数组的每个字节的数据输出到屏幕,可以在代码末尾加入以下代码:

  1. DISPLAY_RESULT:
  2.     LEA SI, D            ; 加载 D 数组的地址到 SI
  3.     MOV CX, 4            ; 要显示的字节数
  4. PRINT_LOOP:
  5.     MOV AL, [SI]         ; 读取 D 数组的字节
  6.     ADD AL, 30H          ; 转换数值到字符
  7.     MOV DL, AL
  8.     MOV AH, 02H          ; int 21h 的显示功能
  9.     INT 21H              ; 显示字符
  10.     INC SI               ; 下一个字节
  11.     LOOP PRINT_LOOP

  12. END_PROGRAM:
  13.     MOV AX, 4C00H         ; 返回 DOS
  14.     INT 21H
复制代码


这样,程序运行后会在屏幕上显示 D 数组中每个字节的十六进制值。

通过这些步骤,您可以在 DOSBox 中编译、执行和查看汇编代码运行的结果。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-1 02:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表