汇编语言:将datasg段中每个单词的前4个字母改写为大写字母.assume cs:codesg,ss:stacksg,ds:datasgstacksg segment\x05dw 0,0,0,0,0,0,0,0stacksg endsdatasg segment\x05db '1.display '\x05db '2.brows '\x05db '3.replace '\x05db '4.modif

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/08 13:52:58
汇编语言:将datasg段中每个单词的前4个字母改写为大写字母.assume cs:codesg,ss:stacksg,ds:datasgstacksg segment\x05dw 0,0,0,0,0,0,0,0stacksg endsdatasg segment\x05db '1.display '\x05db '2.brows '\x05db '3.replace '\x05db '4.modif

汇编语言:将datasg段中每个单词的前4个字母改写为大写字母.assume cs:codesg,ss:stacksg,ds:datasgstacksg segment\x05dw 0,0,0,0,0,0,0,0stacksg endsdatasg segment\x05db '1.display '\x05db '2.brows '\x05db '3.replace '\x05db '4.modif
汇编语言:将datasg段中每个单词的前4个字母改写为大写字母.
assume cs:codesg,ss:stacksg,ds:datasg
stacksg segment
\x05dw 0,0,0,0,0,0,0,0
stacksg ends
datasg segment
\x05db '1.display '
\x05db '2.brows '
\x05db '3.replace '
\x05db '4.modify '
datasg ends
codesg segment
start:\x05mov ax,stacksg
\x05mov ss,ax
\x05mov sp,16
\x05mov ax,datasg
\x05mov ds,ax
\x05mov bx,0
\x05mov cx,4
s:\x05push cx
\x05mov si,3
\x05mov cx,4
s0:mov al,[bx+si]
\x05and al,0dfh //与运算
\x05mov [bx+si],al
\x05inc si
\x05loop s0
\x05add bx,16
\x05pop cx
\x05loop s
\x05mov ax,4c00h
\x05int 21h
codesg ends
end start
不是很理解这个代码的答案.能否哪位高手能把代码的每一句的含义写上.

汇编语言:将datasg段中每个单词的前4个字母改写为大写字母.assume cs:codesg,ss:stacksg,ds:datasgstacksg segment\x05dw 0,0,0,0,0,0,0,0stacksg endsdatasg segment\x05db '1.display '\x05db '2.brows '\x05db '3.replace '\x05db '4.modif
其他的都是固定格式,或者基本寻址方式,和,条件跳转实现的循环
算法就这一句
and al,0dfh //与运算
意思是把大写字母转化为小写字母,(0df)h=(1101 1111)b,
这个与运算是把该字符的第6位清零,其他位不变,你仔细观察就会发现,大写字母和小写字母的区别是,只用这一位不同,大写字母的第6为0,而小写字母的第6位为1,因此把大写字母变成小写字母只需把字母和0dfh相与就可以了,当然这还有一点好处是,原来是大写字母的不会影响