首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在8086程序集中获取字符串并计算其中的一个字符

在8086程序集中获取字符串并计算其中的一个字符
EN

Stack Overflow用户
提问于 2018-04-10 17:17:22
回答 1查看 3.9K关注 0票数 1

目前,我正试图在程序集中编写一个代码,用于从用户那里获取一些字符串并计算其中的“a”字符。这份工作看上去很简单,但问题是我不能很好地计算,也不知道问题出在哪里。例如,对于'amin‘这个词,输出是97,或者对于其他类似于>6的输出,并且在因特网上没有太多用于汇编8086的教程。所以如果有人能帮忙我会很感激的。

代码语言:javascript
复制
stk     segment
    dw 32 dup(?)
stk     ends

dts     segment
    p1 db 10,13,'Please enter max 80 char',10,13,'$'
    p2 db 10,13,'Number of (a) chars:  $'
    max db 80
    len db ?
    count db 0
    char db 'a'
    str db 80 dup (?)
dts ends

cds     segment
    assume cs:cds, ss:stk, ds:dts
    main proc far
        mov ax, seg dts
        mov ds,ax
        mov ah,09
        mov dx,offset p1
        int 21h

        mov ah,0ah
        mov dx,offset max
        int 21h

        lea si,str
        mov cl,len
        mov ch,0 ; Initializing CX(Counter) Register for loop
check:
        mov al,[si]
        cmp char,al
        jne skip
        inc count
skip:
        inc si; Next char in str
        loop check

        mov al,count
        mov ah,0
        mov dl,10
        div dl
        add ax,3030h; making the right ascii code for printing
        mov bx,offset max-3
        mov [bx],ax
        mov ah,09
        mov dx,offset p2
        int 21h

        mov ah,4ch
        int 21h

    main endp
cds ends

    end main
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-10 20:02:57

int 21h,ah=0ah将用户输入读入DS:DX的缓冲区中。DS:DX指向的缓冲区的第一个字节是最大长度,后面是实际长度,后面是读取的字符。您需要在len之后立即定义str;否则输入将覆盖countchar。获得97的原因是count被输入的第一个字符覆盖。

为了在代码中更清楚地说明这一点,我建议这样写:

代码语言:javascript
复制
buf:
    max db 80
    len db ?
    str db 80 dup (?)

count db 0
char db 'a'

然后在int 21h之前,ah=0ah

代码语言:javascript
复制
    mov dx, offset buf
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49759514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档