拘役怎么执行:汇编高手进,几个简单题目!

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/05 14:23:11
这3个题目的汇编程序
1 .2个个位数相加(其结果<16),通过键盘输入输出
2. 输入小写字母,输出大写字母
3.输入一个数或者字符,如果是F以后字母,爆错,以16进制输出

1 .2个个位数相加(其结果<16),通过键盘输入输出
DATA SEGMENT
STR1 DB 0AH,0DH,'opr1 = ','$'
STR2 DB 0AH,0DH,'opr2 = ','$'
RES DB 0AH,0DH,'sum = ','$'
RESULT DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
START:
PUSH DS
SUB AX,AX
MOV AX,DATA
MOV DS,AX

LEA DX,STR1
MOV AH,09H
INT 21H ; PRINT 'opr1 = '

INPUT1:
MOV AH,08H
INT 21H
CMP AL,30H
JB INPUT1
CMP AL,39H
JG INPUT1

ADD RESULT,AL ; RESULT + OPR1
MOV AH,02H
MOV DL,AL
INT 21H ; PRINT OPR1

LEA DX,STR2
MOV AH,09H
INT 21H ; PRINT 'opr2 = '

INPUT2:
MOV AH,08H
INT 21H
CMP AL,30H
JB INPUT2
CMP AL,39H
JG INPUT2

ADD RESULT,AL ; RESULT + OPR2
MOV AH,02H
MOV DL,AL
INT 21H ; PRINT OPR2

SUB RESULT,60H ; DIGIT(0-9) = ASC(30H-39H)

LEA DX,RES
MOV AH,09H
INT 21H ; PRINT 'sum = '

MOV AH,02H
CMP RESULT,10
JGE FIRSTNUM ; RESULT >= 10
JMP NEXTNUM

FIRSTNUM:
SUB RESULT,10
MOV DL,31H
INT 21H ; PRINT '1'

NEXTNUM:
MOV DL,RESULT
ADD DL,30H
INT 21H ; PRINT RESULT

MOV AX,4C00H
INT 21H
MAIN ENDP
CODE ENDS
END START

------------- screen ---------------

opr1 = 8
opr2 = 9
sum = 17

2. 输入小写字母,输出大写字母
DATA SEGMENT
TURNTO DB ' -> ','$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
START:
PUSH DS
SUB AX,AX
MOV AX,DATA
MOV DS,AX

INPUT:
MOV AH,08H
INT 21H ; INPUT A
CMP AL,61H
JB INPUT
CMP AL,7AH
JG INPUT

MOV DL,AL
MOV AH,02H
INT 21H ; PRINT A IN LOWCASE

PUSH DX
LEA DX,TURNTO
MOV AH,09H
INT 21H ; PRINT ' -> '
POP DX

SUB DL,20H
MOV AH,02H
INT 21H ; PRINT A IN UPCASE

MOV AX,4C00H
INT 21H
MAIN ENDP
CODE ENDS
END START

------------- screen ---------------
a -> A

3.输入一个数或者字符,如果是F以后字母,爆错,以16进制输出

这个问题你没有说清楚,所以没法按要求做出,
到底是以16进制输入这个字符的ASCII码
还是什么?
还有,输入的一个数,是一个数字,还是一个不定长的数?

如果还有什么问题和要求,请Mail我,我的邮箱请查看我的信息,里面有。

1 .2个个位数相加(其结果<16),通过键盘输入输出
DATA SEGMENT
STR1 DB 0AH,0DH,'opr1 = ','$'
STR2 DB 0AH,0DH,'opr2 = ','$'
RES DB 0AH,0DH,'sum = ','$'
RESULT DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
START:
PUSH DS
SUB AX,AX
MOV AX,DATA
MOV DS,AX

LEA DX,STR1
MOV AH,09H
INT 21H ; PRINT 'opr1 = '

INPUT1:
MOV AH,08H
INT 21H
CMP AL,30H
JB INPUT1
CMP AL,39H
JG INPUT1

ADD RESULT,AL ; RESULT + OPR1
MOV AH,02H
MOV DL,AL
INT 21H ; PRINT OPR1

LEA DX,STR2
MOV AH,09H
INT 21H ; PRINT 'opr2 = '

INPUT2:
MOV AH,08H
INT 21H
CMP AL,30H
JB INPUT2
CMP AL,39H
JG INPUT2

ADD RESULT,AL ; RESULT + OPR2
MOV AH,02H
MOV DL,AL
INT 21H ; PRINT OPR2

SUB RESULT,60H ; DIGIT(0-9) = ASC(30H-39H)

LEA DX,RES
MOV AH,09H
INT 21H ; PRINT 'sum = '

MOV AH,02H
CMP RESULT,10
JGE FIRSTNUM ; RESULT >= 10
JMP NEXTNUM

FIRSTNUM:
SUB RESULT,10
MOV DL,31H
INT 21H ; PRINT '1'

NEXTNUM:
MOV DL,RESULT
ADD DL,30H
INT 21H ; PRINT RESULT

MOV AX,4C00H
INT 21H
MAIN ENDP
CODE ENDS
END START

------------- screen ---------------

opr1 = 8
opr2 = 9
sum = 17

2. 输入小写字母,输出大写字母
DATA SEGMENT
TURNTO DB ' -> ','$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
START:
PUSH DS
SUB AX,AX
MOV AX,DATA
MOV DS,AX

INPUT:
MOV AH,08H
INT 21H ; INPUT A
CMP AL,61H
JB INPUT
CMP AL,7AH
JG INPUT

MOV DL,AL
MOV AH,02H
INT 21H ; PRINT A IN LOWCASE

PUSH DX
LEA DX,TURNTO
MOV AH,09H
INT 21H ; PRINT ' -> '
POP DX

SUB DL,20H
MOV AH,02H
INT 21H ; PRINT A IN UPCASE

MOV AX,4C00H
INT 21H
MAIN ENDP
CODE ENDS
END START

第一题:
#include<stdio.h> (这句可以不写的)
main()
{
int a,b,c;
printf("please input a,b:")
scanf("%d,%d",&a,&b);
c=a+b;
if(c<16) printf("\na+b=%d",c);}
else printf("\nc>16");
}

第二题:
#include<stdio.h>
main()
{
char ch;
printf("please input ch:")
ch=getchar();
if(ch<='z' && ch>='a')
printf("\n%c's capital is %c",ch,ch+32);
else printf("\nit departed from the subject!");
}

第三题:
#include<stdio.h>
main()
{
char c;
printf("please input a number or a letter:")
c=getchar();
if (c>'F')
printf("\nwrong!c=%x",c);
printf("c=%c",c);
}

输出的时候是输出10进制还是16进制?

1 .
2个个位数相加(其结果<16),通过键盘输入输出
DATA SEGMENT
STR1 DB 0AH,0DH,'opr1 = ','$'
STR2 DB 0AH,0DH,'opr2 = ','$'
RES DB 0AH,0DH,'sum = ','$'
RESULT DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
START:
PUSH DS
SUB AX,AX
MOV AX,DATA
MOV DS,AX

LEA DX,STR1
MOV AH,09H
INT 21H ; PRINT 'opr1 = '

INPUT1:
MOV AH,08H
INT 21H
CMP AL,30H
JB INPUT1
CMP AL,39H
JG INPUT1

ADD RESULT,AL ; RESULT + OPR1
MOV AH,02H
MOV DL,AL
INT 21H ; PRINT OPR1

LEA DX,STR2
MOV AH,09H
INT 21H ; PRINT 'opr2 = '

INPUT2:
MOV AH,08H
INT 21H
CMP AL,30H
JB INPUT2
CMP AL,39H
JG INPUT2

ADD RESULT,AL ; RESULT + OPR2
MOV AH,02H
MOV DL,AL
INT 21H ; PRINT OPR2

SUB RESULT,60H ; DIGIT(0-9) = ASC(30H-39H)

LEA DX,RES
MOV AH,09H
INT 21H ; PRINT 'sum = '

MOV AH,02H
CMP RESULT,10
JGE FIRSTNUM ; RESULT >= 10
JMP NEXTNUM

FIRSTNUM:
SUB RESULT,10
MOV DL,31H
INT 21H ; PRINT '1'

NEXTNUM:
MOV DL,RESULT
ADD DL,30H
INT 21H ; PRINT RESULT

MOV AX,4C00H
INT 21H
MAIN ENDP
CODE ENDS
END START

------------- 屏幕显示---------------
opr1 = 8
opr2 = 9
sum = 17

2.
输入小写字母,输出大写字母
DATA SEGMENT
TURNTO DB ' -> ','$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
START:
PUSH DS
SUB AX,AX
MOV AX,DATA
MOV DS,AX

INPUT:
MOV AH,08H
INT 21H ; INPUT A
CMP AL,61H
JB INPUT
CMP AL,7AH
JG INPUT

MOV DL,AL
MOV AH,02H
INT 21H ; PRINT A IN LOWCASE

PUSH DX
LEA DX,TURNTO
MOV AH,09H
INT 21H ; PRINT ' -> '
POP DX

SUB DL,20H
MOV AH,02H
INT 21H ; PRINT A IN UPCASE

MOV AX,4C00H
INT 21H
MAIN ENDP
CODE ENDS
END START

看来汇编还是有点难的嘛...哈.....我不是故意混的....我只学了一点点啊..