编写一个汇编程序,要求将用键盘输入的小写字母转换成大写字母并显示出来

编写一个汇编程序,要求将用键盘输入的小写字母转换成大写字母并显示出来,第1张

1、打开软件Visual C++6.0,新建一个C源程序,书写C语言程序。

2、首先定义两个字符型变量,代码:char c1,c2从键盘中输入一个大写字母,代码:c1=getchar()。

3、大写字母小写字母的ASCII值相差32。代码:c2=c1+32。将大写字母转化成小写字母。

4、输出小写字母。使用putchar()函数,可以输出一个字符型变量。代码:putchar(c2)。

5、连接编译程序。点击工具栏按钮【Compile(Ctrl+F7)】,编译程序;点击工具栏上的像感叹号的按钮【BuildExecute(Ctrl+F5)】,组建程序。

6、在程序运行窗口中,输入一个大写字母A,按回车键,即可输出一个小写字母。

datasegment

num1db03dup(?)

num2db03dup(?)

dataends

codesegment'code'

assumecs:code,ds:data

start:

movax,data

movds,ax

movsi,offsetnum1

输入一组数

movah,01h

int21h

subal,'0'

movdl,al

movcl,3

shlal,cl

shldl,1

addal,dl

mov[si],al

movah,01h

int21h

subal,'0'

add[si],al

movah,01h

int21h

movbx,offsetnum2

再输入一组数

movah,01h

int21h

subal,'0'

movdl,al

movcl,3

shlal,cl

shldl,1

addal,dl

mov[bx],al

movah,01h

int21h

subal,'0'

add[bx],al

movah,02h

movdl,0dh

int21h

movdl,0ah

int21h

把两组数求和

moval,[bx]

addal,[si]al=sum

xorah,ah

movcl,100

divcl

movbx,ax

testal,al

jz @f

addal,'0'

movdl,al

movah,02h

int21h

@@:

moval,bh

xorah,ah

movcl,10

divcl

movbx,ax

addal,'0'

movdl,al

movah,02h

int21h

addbh,'0'

movdl,bh

movah,02h

int21h

movah,4ch

int21h

codeends

endstart

inputexample:

1234<Enter>

or

0208<Enter>

扩展资料:

十进制转二进制代码:

voiddectobin(intn){

intresult=0,k=1,i,temp

temp=n

while(temp){

i=temp%2

result=k*i+result

k=k*10

temp=temp/2

}

printf("%d\n",result)

}

算法分析:

在实现模2取余后需要逆序输出,这个地方通过不断乘以10来实现后一位比前一位的位数多10,不需要再通过数组或者逆序函数来实现。

CODE SEGMENT

ASSUME CS:CODE

MAIN PROC FAR

START:

    CALL DEC_BIN

    CALL BIN_HEX

    call dec_bin1

    call BINIDEC

    MOV AH,4CH

    INT 21H

    RET

    MAIN ENDP

DEC_BIN PROC NEAR

       MOV BX,0

GET_CHAR:MOV AH,1

       INT 21H

       CMP AL,0DH

       JE EXIT

       SUB AL,30H

       JL EXIT

       CMP AL,9

       JG EXIT

       CBW

       XCHG AX,BX

       MOV CX,10

       MUL CX

       XCHG AX,BX

       ADD BX,AX

       JMP GET_CHAR

EXIT:

   mov dl,0ah

   mov ah,2

   int 21h

   RET

  DEC_BIN ENDP

BIN_HEX PROC NEAR

     MOV CH,4

ROTATE:MOV CL,4

     ROL BX,CL

     MOV AL,BL

     AND AL,0FH

     ADD AL,30H

     CMP AL,3AH

     JL DISPLAY

     ADD AL,7H

DISPLAY:MOV DL,AL

      MOV AH,2

      INT 21H

      DEC CH

      JNZ ROTATE

      mov dl,0ah

      mov ah,2

      int 21h

      RET

BIN_HEX ENDP

DEC_BIN1 PROC NEAR

        MOV BX,0

GET_CHAR1:MOV AH,1

        INT 21H

        CMP AL,0DH

        JE EXIT1

        SUB AL,30H

        JL EXIT1

        CMP AL,9

        Jle t0

        SUB AL,7H

        CMP AL,15

        jg exit1

      t0:CBW

        XCHG AX,BX

        mov cl,4

        rol ax,cl

        ADD BX,AX

        JMP GET_CHAR1

EXIT1:mov dl,0ah

    mov ah,2

    int 21h

    RET

DEC_BIN1 ENDP

BINIDEC PROC NEAR                

    MOV CX,1000    

    CALL DEC_DIV    

    MOV CX,100    

    CALL DEC_DIV    

    MOV CX,10    

    CALL DEC_DIV    

    MOV CX,1    

    CALL DEC_DIV    

    RET

BINIDEC ENDP

DEC_DIV PROC NEAR      

      MOV AX,BX        

      MOV DX,0            

      DIV CX    

      MOV BX,DX

      CMP AL,9

      ADD AL,30H

      MOV DL,AL          

      MOV AH,2    

      INT 21H

      RET

DEC_DIV ENDP

CODE ENDS

END START


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11649495.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存