鱼C论坛

 找回密码
 立即注册
查看: 283|回复: 1

[已解决]运行结果乱码问题

[复制链接]
发表于 2023-12-3 16:06:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:
请编程实现百分比的计算。例如有如下数据:
x  dw  4
y  dw  5
result dw ?
实现计算:result = x/(x+y)= 44%,故result的值为44。(提示:result = 100*x/(x+y)的商)

下面是我的代码:
  1. data segment
  2.     x dw 4
  3.     y dw 5
  4.     result dw ?
  5. data ends

  6. code segment
  7.         assume cs:code, ds:data
  8. start:
  9.     mov ax, data
  10.     mov ds, ax
  11.    
  12.     mov ax, x
  13.     mov bx, y
  14.     add bx, ax
  15.                 imul ax, 100
  16.     idiv bx
  17.     mov result, ax
  18.        
  19.         ; 输出结果
  20.     mov ah, 2
  21.     lea dx, result
  22.     int 21h
  23.        
  24.         mov ah, 2
  25.         mov dl, '%'
  26.         int 21h
  27.    
  28.     mov ah, 4ch
  29.     int 21h
  30.        
  31. code ends
  32.         end start
复制代码



最佳答案
2023-12-3 16:06:32
你的代码基本上是正确的,但是在输出结果时可能会出现乱码问题。这是因为在打印结果之前,你没有将结果转换为ASCII码。下面是修改后的代码:
  1. data segment
  2.     x dw 4
  3.     y dw 5
  4.     result dw ?
  5. data ends
  6. code segment
  7.     assume cs:code, ds:data
  8. start:
  9.     mov ax, data
  10.     mov ds, ax
  11.    
  12.     mov ax, x
  13.     mov bx, y
  14.     add bx, ax
  15.     imul ax, 100
  16.     idiv bx
  17.     mov result, ax
  18.    
  19.     ; 将结果转换为ASCII码
  20.     add al, '0' ; 加上ASCII码的偏移值
  21.     mov ah, 0 ; 清零高字节,保证AL是一个字符
  22.     mov dl, al
  23.     mov ah, 2
  24.     int 21h
  25.    
  26.     ; 输出百分号
  27.     mov dl, '%'
  28.     int 21h
  29.    
  30.     mov ah, 4ch
  31.     int 21h
  32. code ends
  33. end start
复制代码

在这个代码中,我添加了几行代码来将结果转换为ASCII码,并用`int 21h`中断来显示结果和百分号。这样就可以避免乱码问题。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

运行结果

运行结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-3 16:06:32 | 显示全部楼层    本楼为最佳答案   
你的代码基本上是正确的,但是在输出结果时可能会出现乱码问题。这是因为在打印结果之前,你没有将结果转换为ASCII码。下面是修改后的代码:
  1. data segment
  2.     x dw 4
  3.     y dw 5
  4.     result dw ?
  5. data ends
  6. code segment
  7.     assume cs:code, ds:data
  8. start:
  9.     mov ax, data
  10.     mov ds, ax
  11.    
  12.     mov ax, x
  13.     mov bx, y
  14.     add bx, ax
  15.     imul ax, 100
  16.     idiv bx
  17.     mov result, ax
  18.    
  19.     ; 将结果转换为ASCII码
  20.     add al, '0' ; 加上ASCII码的偏移值
  21.     mov ah, 0 ; 清零高字节,保证AL是一个字符
  22.     mov dl, al
  23.     mov ah, 2
  24.     int 21h
  25.    
  26.     ; 输出百分号
  27.     mov dl, '%'
  28.     int 21h
  29.    
  30.     mov ah, 4ch
  31.     int 21h
  32. code ends
  33. end start
复制代码

在这个代码中,我添加了几行代码来将结果转换为ASCII码,并用`int 21h`中断来显示结果和百分号。这样就可以避免乱码问题。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 12:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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