两个关于汇编编程的有关问题,求大牛解答
两个关于汇编编程的问题,求大牛解答!
1.编写一个程序,首先测试双字变量DVAR的最高位和最低位如果同时为1,则显示字母”L”; 如果最高位和最低位只有一位为1,则显示字母“R”,如果最高位和最低位同时为0,,则显示字母”M”。
2.编写一个程序,实现1+2+3+„„+100,并将结果存入AX。
用MASM实现,谢谢各位大牛!

------解决方案--------------------
这是第一道题目的代码,本例中取DVAR为3f21h,首位末尾只有一个为1,所以输出R

------解决方案--------------------
第二道题目更简单,楼主多看书,汇编没你想的那么麻烦

十六进制的13bah即为十进制的5050
1.编写一个程序,首先测试双字变量DVAR的最高位和最低位如果同时为1,则显示字母”L”; 如果最高位和最低位只有一位为1,则显示字母“R”,如果最高位和最低位同时为0,,则显示字母”M”。
2.编写一个程序,实现1+2+3+„„+100,并将结果存入AX。
用MASM实现,谢谢各位大牛!
------解决方案--------------------
data segment
DVAR dd 3f21h
db 'L','R','M'
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov si,0
mov ax,[si]
mov bx,ax
mov cl,15
shl ax,cl
and bx,1
add ax,bx
cmp al,2
je print_L
cmp al,1
je print_R
jmp print_M
print_L:
add si,4
jmp print
print_R:
add si,5
jmp print
print_M:
add si,6
jmp print
print:
mov ah,9
mov al,[si]
mov bl,00000111b
mov bh,0
mov cx,1
int 10h
mov ax,4c00h
int 21h
code ends
end start
这是第一道题目的代码,本例中取DVAR为3f21h,首位末尾只有一个为1,所以输出R
------解决方案--------------------
第二道题目更简单,楼主多看书,汇编没你想的那么麻烦
assume cs:code
code segment
start:
mov ax,0;先把ax清零
mov cx,100;从100到1全部加到ax中
s:
add ax,cx
loop s
mov ax,4c00h
int 21h
code ends
end start
十六进制的13bah即为十进制的5050