鱼C论坛

 找回密码
 立即注册
查看: 410|回复: 2

[已解决]severe

[复制链接]
发表于 2023-7-10 16:39:59 | 显示全部楼层 |阅读模式

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

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

x


  1. assume cs:codesg,ds:datasg
  2. datasg segment
  3. db 'ibm             ’
  4. db 'dec             ’
  5. db 'dos             ’
  6. db 'vax             ’
  7. datasg ends
  8. codesg segment
  9. start:
  10.            mov ax,datasg
  11.            mov ds,ax
  12.            mov bx,0
  13.            mov cx,4
  14.           
  15.         s0:mov si,0
  16.            mov cx,3
  17.           
  18.         s:mov al,[bx+si]
  19.           and al,11011111b
  20.           mov [bx+si],al
  21.           inc si
  22.           
  23.           loop s
  24.                     
  25.           add bx,16
  26.           loop s0
  27.           
  28. codesg ends
  29. end start

复制代码



我的问题: 提示:  4severe errors    ??

最佳答案
2023-7-10 16:40:11
根据您提供的代码,出现了几个错误。首先,指令'ibm     ''dec      '应该用逗号代替空格,如下所示:
  1. db 'ibm',
  2. db 'dec',
复制代码

其次,您使用的汇编指令不符合x86汇编语法。下面是修正后的代码:
  1. assume cs:codesg, ds:datasg
  2. datasg segment
  3.     db 'ibm'
  4.     db 'dec'
  5.     db 'dos'
  6.     db 'vax'
  7. datasg ends
  8. codesg segment
  9. start:
  10.     mov ax, datasg
  11.     mov ds, ax
  12.     mov bx, 0
  13.     mov cx, 4
  14.    
  15. s0:
  16.     mov si, 0
  17.     mov cx, 3
  18. s:
  19.     mov al, [bx+si]
  20.     and al, 11011111b
  21.     mov [bx+si], al
  22.     inc si
  23.     loop s
  24.    
  25.     add bx, 16
  26.     loop s0
  27. codesg ends
  28. end start
复制代码

这段代码修正了语法错误,并使用x86汇编语法编写。请注意,这只是根据您提供的代码进行的修正,实际上可能还有其他错误或问题需要解决。如果您需要更详细的帮助,请提供更多相关信息。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-10 16:40:11 | 显示全部楼层    本楼为最佳答案   
根据您提供的代码,出现了几个错误。首先,指令'ibm     ''dec      '应该用逗号代替空格,如下所示:
  1. db 'ibm',
  2. db 'dec',
复制代码

其次,您使用的汇编指令不符合x86汇编语法。下面是修正后的代码:
  1. assume cs:codesg, ds:datasg
  2. datasg segment
  3.     db 'ibm'
  4.     db 'dec'
  5.     db 'dos'
  6.     db 'vax'
  7. datasg ends
  8. codesg segment
  9. start:
  10.     mov ax, datasg
  11.     mov ds, ax
  12.     mov bx, 0
  13.     mov cx, 4
  14.    
  15. s0:
  16.     mov si, 0
  17.     mov cx, 3
  18. s:
  19.     mov al, [bx+si]
  20.     and al, 11011111b
  21.     mov [bx+si], al
  22.     inc si
  23.     loop s
  24.    
  25.     add bx, 16
  26.     loop s0
  27. codesg ends
  28. end start
复制代码

这段代码修正了语法错误,并使用x86汇编语法编写。请注意,这只是根据您提供的代码进行的修正,实际上可能还有其他错误或问题需要解决。如果您需要更详细的帮助,请提供更多相关信息。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-10 16:43:09 | 显示全部楼层
这段汇编代码中的主要目的是转换存储在数据段中的字符串为大写。我看到这个代码中存在几个错误,我将按照顺序指出:

1. 第一个错误是,在开始执行任何内存操作之前,你需要初始化堆栈段  SS  和堆栈指针  SP 。这是必需的,因为你正在使用  loop  指令,它依赖于  SP 。

2. 第二个错误在于你的循环嵌套。第一个  loop  指令使用  cx  寄存器计数,然后每次循环减少它的值。然而,在外部循环  s0  中,你没有重新设置  cx  的值为3,这会导致第二次循环开始时  cx  为0,不再执行内部循环。

3. 第三个错误是你并没有在  s0  循环完成后恢复  bx  的值。你应该在  s0  循环前后保存和恢复  bx  的值。

4. 最后,你需要正确结束程序。在你的代码中,并没有一个退出点。一个常用的方法是使用 int 21h, AH=4Ch,它是DOS退出程序的系统调用。

对于这四个错误的修正,你的代码应该看起来像这样:

  1. datasg segment
  2. db 'ibm             ’
  3. db 'dec             ’
  4. db 'dos             ’
  5. db 'vax             ’
  6. datasg ends

  7. codesg segment
  8. assume cs:codesg, ds:datasg
  9. org 100h  ; DOS .com program start at 100h
  10. start:
  11.     mov ax, datasg
  12.     mov ds, ax
  13.     mov bx, 0
  14.     mov cx, 4

  15. s0:
  16.     push cx  ; save outer loop counter
  17.     mov si, 0
  18.     mov cx, 3

  19. s:
  20.     mov al,[bx+si]
  21.     and al, 11011111b
  22.     mov [bx+si], al
  23.     inc si
  24.     loop s

  25.     add bx, 16
  26.     pop cx  ; restore outer loop counter
  27.     loop s0

  28.     ; Exit the program
  29.     mov ah, 4Ch  ; DOS terminate function
  30.     int 21h  ; DOS interrupt

  31. codesg ends
  32. end start
复制代码


这样应该就没有编译错误了。注意,在写汇编语言时,很重要的一点是清晰理解寄存器的使用和指令的效果,特别是对循环和条件跳转的处理。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 22:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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