【问题标题】:Put User Input to CX将用户输入提交给 CX
【发布时间】:2016-04-10 03:25:12
【问题描述】:

第一次尝试:我已经输入了预定义的数据。当有用户输入时,我的其他代码将不起作用。

.model small
.stack
.data
    message db 10,13,"Multiply 2 x 2 x 16 =","    ","$"
space db 10,13,"$"
.code
    mov ax,@data
    mov ds,ax



;2 x 2 = [4]--------------- 
    mov cx,2                ;cx = 2, 1, 0
    mov bx,0                ;bx = 0, 2, 4
again1:
    add bx,2                ;bx = 4 
        loop again1
;[4] x 16 = 64---------------   
    mov cx,bx               ;cx = 4, 3, 2, 1, 0                 
    mov bx,0                ;bx = 0,16,32,48,64
again2:
    add bx,16               ;bx = 64 -> ax(ah,al)
        loop again2
        mov ax,bx   

;64 = Print "6 and 4"------

    mov cx,65535            ;cx = 65,535 times (almost infinite # of loops)
    mov bl,0                ;bl =    0,         1,      2,      3,      4,      5, 6
                            ;al = 64(-10),54(-10),44(-10),34(-10),24(-10),14(-10), 4
again3: 
    sub al,10
    cmp al,10               ;al(4) is less than 10
    jl next                 ;go to "NEXT"
        inc bl
            loop again3

next:                       ;NEXT
    mov ah,09
    lea dx,message
    int 21h

    add al,30h              ;al = 4 + 30 = "34" when printed is equals to "4"
    mov cl,al

    add bl,31h              ;bl =  6 + 30 = "36" when printed is equals to "6"
    mov dl,bl               ;print 6
    mov ah,02
    int 21h

    mov dl,cl               ;print 4
    mov ah,02
    int 21h

    mov ah,09
    lea dx,space
    int 21h

        ;2x2x16 =64 

    mov ah,4ch
    int 21h
end

这是带有用户输入的那个:

.model small
.stack
.data
    message db 10,13,"The Answer is ...","  ","$"
    space db 10,13,"$"
.code
    mov ax,@data
    mov ds,ax


    mov ah,01       ;user input 1 -> al -> cl******
    int 21h
    mov cl,al

;? x ? = [?]--------------- 
    mov cx,?                ;cx = ?, 0
    mov bx,0                ;bx = 0, ?[+bx]

        mov ah,01       ;user input 2 -> al -> bl******
        int 21h
        mov bl,al
again1:
    add bx,?                ;bx = last count of bx 
        loop again1
;[?] x ? = ??---------------    
    mov cx,bx               ;cx = ?, 0                  
    mov bx,0                ;bx = 0, ?[+bx]

    mov ah,01       ;user input 3 -> al -> bl******
    int 21h
    mov cl,al
again2:
    add bx,?                ;bx = TOTAL# -> ax(ah,al)
    loop again2
     mov ax,bx  

;TOTAL# = Print "#1stDigit and #2ndDigit"------2x2x5=20

    mov cx,65535            ;cx = 65,535 times (almost infinite # of loops)
    mov bl,0                ;bl =       0,         1,     2,     3,     4,     5, 6     <-COUNT#
                        ;al = TOTAL#(-10),#(-10),#(-10),#(-10),#(-10),#(-10), ......FINAL#
again3: 
    sub al,10
    cmp al,10               ;al(FINAL#) is less than 10
    jl next                 ;go to "NEXT"
        inc bl
            loop again3

next:                       ;NEXT
    mov ah,09
    lea dx,message
    int 21h

    add al,30h              ;al = FINAL# + 30 =  when printed is equals to "FINAL# real value"
    mov cl,al

    add bl,31h              ;bl = COUNT# + 30 = when printed is equals to "COUNT# real value"
    mov dl,bl               ;print 1st digit
    mov ah,02
    int 21h

    mov dl,cl               ;print 2nd digit
    mov ah,02
    int 21h

    mov ah,09
    lea dx,space
    int 21h

        ;2x2x16 =64 

    mov ah,4ch
    int 21h
end

它只是给了我错误的答案:/我对 TASM 很陌生,它正在杀死我

基本上,我不知道如何将 USER INPUT 放入cx。我只需要使用mov,ah 01h,这意味着用户只能输入一位数字。

另外,我还有一个问题,如果最终答案是 3 位数的 #。

例如,2 x 2 x 16 = 64(安全,仅限 2 位)

但是5 x 3 x 9 = 135(当我运行程序时,只给了我 5 个) 我不明白 3 位数答案的逻辑。

【问题讨论】:

    标签: assembly x86-16 tasm


    【解决方案1】:
    mov ah,01       ;user input 1 -> al -> cl******
    int 21h
    mov cl,al
    

    由于输入函数为您提供了一个字符,您仍然需要通过减去 48 将其转换为可用的数字
    您还需要在CH 寄存器中输入一个零,因为您将使用整个CX 作为计数器。

    mov ah,01       ;user input 1 -> al -> cl******
    int 21h
    sub al,48
    mov cl,al
    mov ch,0
    

    关于 3 位数答案的逻辑:

    您应该将 again3 结构替换为连续 2 个这样的结构。第一个将重复减去 100,第二个将重复减去 10。在这之间,您将结果保存到不同的寄存器或变量中。

    【讨论】:

    • 啊,非常感谢,但是.. 在我接受输入后出现了问题,因为它没有给我正确的答案:/我不明白出了什么问题
    • 让我再检查一次xD
    猜你喜欢
    • 2018-11-06
    • 2021-04-18
    • 1970-01-01
    • 2013-07-06
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多