简单汇编程序设计--代码转换程序设计

简单汇编程序设计--代码转换程序设计,第1张

小写字母转换为大写输出:

DATA SEGMENT

inbuf DB 100 可能输入的最大字符数

db 0 实际输入字符数

db 100 DUP('$') 输入缓冲

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:

MOV AX,DATA

MOV DS,AX

mov di,OFFSET inbuf

输入字符串

MOV AH,0AH

MOV DX,di

INT 21H

xor cx,cx

mov cl,[di+1] 循环次数(输入字符数)

lea si,[di+2] 输入串起始地址

循环比较

next1:

cmp byte ptr [si],'A'

jb skip1

cmp byte ptr [si],'Z'

ja skip1

or byte ptr [si],20h 转小写

skip1:

inc si

loop next1

MOV DL,0AH

MOV AH,02H

INT 21H

输出字符串

lea DX,[di+2]

MOV AH,09H

INT 21H

mov cl,[di+1] 循环次数(输入字符数)

lea si,[di+2] 输入串起始地址

next2:

cmp byte ptr [si],'a'

jb skip2

cmp byte ptr [si],'z'

ja skip2

xor byte ptr [si],20h 转大写

skip2:

inc si

loop next2

输出字符串

MOV DL,0AH

MOV AH,02H

INT 21H

lea DX,[di+2]

MOV AH,09H

INT 21H

MOV AH,0

INT 16H

MOV AX,4C00H

INT 21H

CODE ENDS

END START

大写字母向小写字母的转换类似

十进制数向十六进制数的转换,先将十进制数转2进制,再将2进制转十六进制

data segment

string1 db 'Please input a letter:',0dh,0ah,'$'

string2 db 0dh,0ah,'Please intput again:',0dh,0ah,'$'

string2 db 0dh,0ah,'SUSSESS QUIT',0dh,0ah,'$'

data ends

code segment

assume cs:code,ds:data

main proc

start: mov ax,data

mov ds,ax

call transform

mov ah,4ch 结束

int 21h

main endp 主程序结束

transform proc 子程序开始

lea dx,string1

mov ah,09h

int 21h

again: mov ah, 01h

int 21h键盘接收一个字符并显示

cmp al,35h

je quit

cmp al, 41h

jb wrong 小于41h说明输入的不是字母,显示出错,

cmp al,5ah 判断是否落在大写字母范围内

ja next没落在大写字母范围内,就需要继续判断是否在小写字母范围内

add al,20h 若是大写字母,则改成小写字母

jmp display显示

next: cmp al,61h 跟61h比较如果小于则不是字母,显示出错

jb wrong

cmp al,7ah再跟7ah比较,看是否落在小子字母范围内

ja wrong

sub al,20h 将小写字母变成大写字母

jmp display

wrong: lea dx,string2

mov ah,9

int 21h

jmp again

display:

mov ah,02h 显示

mov dl,al

int 21h

jmp again

quit: lea dx,string3

mov ah,09h

int 21h

ret

transform endp

code ends

end start

codes segment

assume cs:code

START:

mov bx,0

loop1:

mov ah,1h

int 21h

cmp al,0dh 比较是不是回车键

je print 如果是表示输入完毕

cmp al,'0'

jz rotate

stc 此指令设置cf为1

rotate:

rcl bx,1 带进位左移

jmp loop1

print:

mov dl,0dh 指令打印回车

mov ah,2h

int 21h

mov dl,0ah 打印换行

mov ah,2h

int 21h

mov cl,4 将BX中的二进制数每4位划成一组

mov ch,4

loop2:

rol bx,cl

mov dl,bl

and dl,0fh 按组求对应的ASCII码送显示器

add dl,30h

cmp dl,3ah

jb loop3

add dl,7hA的ASCII码值比9的大7

loop3:

mov ah,2h

int 21h

dec ch

jnz loop2

exit:mov ah,4ch

int 21h

codes end

end start

code segment

main proc far

assume cs:code

start:

call A116进制转换成2进制

call crlf 换行

call binidec 2进制转换成10进制

call crlf

jmp main光标等待下一个输入

ret

main endp

A1 proc near

mov bx,0 设置BX初始值为0

char:

mov ah,01h 从键盘输入

int 21h

sub al,30h 从ASCII码转换为2进制

jl exit

cmp al,10d 判断是数字还是字母

jl A2 小于(数字)转移到A2

sub al,27h 判断输入的是否'a'-':'之间的字符

cmp al,0Ah

jl exit

cmp al,10h

jge exit

A2:叠加

mov cl,4

shl bx,cl 逻辑左移4位

mov ah,0

add bx,ax

jmp char

exit:

ret

A1 endp

binidec proc near二进制转换成是进制(除10取余)

mov cx,10000d

call dec_div

mov cx,1000d

call dec_div

mov cx,100d

call dec_div

mov cx,1000d

call dec_div

mov cx,10d

call dec_div

mov cx,1d

call dec_div

ret

dec_div proc near ;求余运算

mov ax,bx

mov dx,0

div cx

mov bx,dx

mov dl,al

add dl,30h ;转换成ASCII码

mov ah,02h

int 21h

ret

dec_div endp

crlf proc near

mov dl,0Ah

mov ah,02h

int 21h

mov dl,0dh

mov ah,02h

int 21h

ret

crlf endp

code ends

end start

有C语言源代码,要将之转换为可执行的应用软件方法如下:

1、准备一个C语言的编译器,比如TC2.0等等

2、运行编译器TC2.0

3、加载源代码

4、按Alt-F9。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存