我正在尝试在8086 TASM中编写一个汇编程序,该程序会将所有小写字母转换为大写字母。我是这种汇编语言编程的新手,所以我真的很想知道我在做错什么。谢谢您的任何帮助。到目前为止,我的代码是:
data segment
sir2 dw 10 dup(?),'$'
sir1 dw 10,?,11 dup(?)
msg1 db 10,13,"introduceti sirul:$"
msg2 db 10,13,"sirul convertit este:$"
len dw ?
data ends
assume ds:data,cs:code
code segment
start:
mov ax,data
mov ds,ax
xor ax,ax
xor cx,cx
xor dx,dx
xor si,si
mov ah,09h
lea dx,msg1
int 21h
xor dx,dx
mov ah,0Ah
lea dx,sir1
int 21h
mov cx,sir1[1]
mov ch,0
mov len,cx
mov ch,0
mov si,2
dec cx
verify:
cmp sir1[si],97
jg uppercase
inc si
loop verify
uppercase:
cmp cx,0
je endd
sub sir1[si],20h
inc si
dec cx
jmp verify
endd:
xor bx,bx
mov bx,sir1
mov sir2,bx
xor dx,dx
mov ah,09h
lea dx,sir2
int 21h
mov ah,04ch
int 21h
code ends
end start
答案 0 :(得分:1)
这不是一个完整的解决方案,因为它看起来好像您想自己进行分配。您想要的伪代码是这样的:
Set the count to 0
For each byte b of input
if b ≥ 'a'
if b ≤ 'z'
Subtract (`a' - 'A`) from b
Increment the count
Set the following byte to the terminator character '$'
顺便说一句:可能是您的教授选择让您编写16位MS-DOS程序。如果有CS专家正在阅读此书,我强烈建议一种更好的汇编语言教学方法是从HLL中的简单测试驱动程序调用一个子例程。适用于多种语言和操作系统的现代免费编译器完全能够将使用不同语言编写的目标文件链接在一起!此外,这与当今的汇编语言在现实世界中的使用非常接近:编写低级内核代码,检查编译后的代码以查看实际情况,并手动优化对性能至关重要的较大程序的各个部分。>