对寻址这块不太懂,不懂怎么改这段代码
<ol><li>;定义一个有数字字符的字符串,统计该字符串中数字的个数</li><li>assume cs:code,ds:data</li><li>data segment</li><li> s1 db 'i123'</li><li>data ends</li><li>stack segment stack</li><li> db 120 dup(?)</li><li>stack ends</li><li>code segment</li><li>start:</li><li> mov ax,1000h</li><li> mov ds,ax</li><li> mov bx,0</li><li> mov cx,0 ;统计该字符串中数字的个数</li><li>FIRST: cmp ,0030h ;判断bx所在地址中的字符的ASCII值是否小于30h</li><li> jnc NEXT ;不小于30h,则跳转,判断bx所在地址中的字符的ASCII值是否小于40h,小于则说明是数字</li><li> INC bx</li><li>NEXT:cmp ,0040h ;判断bx所在地址中的字符的ASCII值是否小于40h,小于则说明是数字</li><li> jc YES</li><li>YES: INC cx ;记录数字的个数</li><li> INC bx ;验证下一个字符</li><li> jmp FIRST</li><li>code ends</li><li>end start</li></ol>data:image/png;base64,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提示这个错误,我试着把bx改成bl,结果又出现了另一个错误,实在不懂怎么改了这段代码的问题在于使用了16位寄存器bx来寻址一个字节的数据,应该使用8位寄存器bl来寻址。同时,程序中的stack segment定义有误,应该是stacks而不是stack。
以下是修改后的代码:
assume cs:code,ds:data,ss:stacks
data segment
s1 db 'i123'
data ends
stacks segment stack
db 120 dup(?)
stacks ends
code segment
start:
mov ax, data
mov ds, ax
mov bx, 0
mov cx, 0
FIRST:
cmp byte ptr , '0'
jnc NEXT
cmp byte ptr , '9'
ja NEXT
inc cx
NEXT:
inc bx
cmp byte ptr , 0
jnz FIRST
mov ah, 4ch
int 21h
code ends
end start
修改后的代码使用了byte ptr来指定寻址的是一个字节,同时使用了8位寄存器bl来寻址。程序还增加了一个判断字符串是否结束的条件,以避免无限循环。 呃不知道为啥代码变成那样了,好丑
;定义一个有数字字符的字符串,统计该字符串中数字的个数
assume cs:code,ds:data
data segment
s1 db 'i123'
data ends
stack segment stack
db 120 dup(?)
stack ends
code segment
start:
mov ax,1000h
mov ds,ax
mov bx,0
mov cx,0 ;统计该字符串中数字的个数
FIRST: cmp ,0030h ;判断bx所在地址中的字符的ASCII值是否小于30h
jnc NEXT ;不小于30h,则跳转,判断bx所在地址中的字符的ASCII值是否小于40h,小于则说明是数字
INC bx
NEXT:cmp ,0040h ;判断bx所在地址中的字符的ASCII值是否小于40h,小于则说明是数字
jc YES
YES: INC cx ;记录数字的个数
INC bx ;验证下一个字符
jmp FIRST
code ends
end start 这段代码有一些问题,比如没有定义 org 指令,无法确定程序加载到内存中的地址。可以按照以下方式修改代码:
assume cs:code, ds:data
data segment
s1 db 'i123'
data ends
stack segment stack
db 120 dup(?)
stack ends
code segment
start:
mov ax, @data ; 初始化数据段寄存器
mov ds, ax
mov bx, 0 ; 将字符串 s1 的起始地址赋给 BX
mov cx, 0 ; 统计该字符串中数字的个数
FIRST:
mov al, ; 取出当前字符,放入 AL 中
cmp al, 30h ; 判断 AL 是否小于 '0'
jc NEXT ; 如果小于 '0',跳过下一行
cmp al, 3Ah ; 判断 AL 是否大于等于 '0' 并且小于等于 '9'
jna YES ; 如果是数字,执行 YES 标签处的指令
NEXT:
inc bx ; 验证下一个字符
cmp byte ptr , 0 ; 判断是否已到字符串末尾
jnz FIRST ; 如果未到末尾,继续循环
DONE:
mov cx, cx ; 计数器中保存的就是数字的个数
mov ah, 4ch ; 退出程序
int 21h
YES:
inc cx ; 记录数字的个数
inc bx ; 验证下一个字符
cmp byte ptr , 0 ; 判断是否已到字符串末尾
jnz FIRST ; 如果未到末尾,继续循环
jmp DONE ; 如果已到末尾,则退出程序
code ends ; 声明代码段结束
end start ; 程序入口
修改后的代码使用 org 指令来确定程序加载到内存中的地址,使用 mov ax, @data 来初始化数据段寄存器,使用 mov al, 取出当前字符。同时,如果已经到达字符串末尾,程序需要正确退出,否则会产生错误。具体而言,可能会出现以下问题:
链接错误:在没有定义 org 指令的情况下,链接程序无法确定程序加载到内存中的地址,从而会抛出链接错误。
运行错误:程序中没有正确退出,导致可能发生内存泄漏等问题。
以上是可以解决的一些问题,由于您并没有说明实际运行时出现的错误信息,可能还需要根据具体的错误提示进行调整。 isdkz 发表于 2023-5-20 21:06
这段代码的问题在于使用了16位寄存器bx来寻址一个字节的数据,应该使用8位寄存器bl来寻址。同时,程序中的s ...
感谢!{:10_278:} 陶远航 发表于 2023-5-20 21:08
这段代码有一些问题,比如没有定义 org 指令,无法确定程序加载到内存中的地址。可以按照以下方式修改代码 ...
牛
倔强青铜铜 发表于 2023-5-20 21:14
牛
那可以给我最佳答案吗 倔强青铜铜 发表于 2023-5-20 21:14
牛
给2#或者4#最佳 陶远航 发表于 2023-5-20 21:14
那可以给我最佳答案吗
{:10_250:} 陶远航 发表于 2023-5-20 21:08
这段代码有一些问题,比如没有定义 org 指令,无法确定程序加载到内存中的地址。可以按照以下方式修改代码 ...
兄弟加油啊,我追上你了{:10_256:} sfqxx 发表于 2023-5-20 21:16
兄弟加油啊,我追上你了
追回来了
页:
[1]