试编写一个汇编语言源程序,将键盘输入的ASCII码转换为二进制。
CSEG SEGMENT
ASSUME CS:CSEG
START: SUB BX,BX
MOV DL,10H
MOV AH,02H
MOV CX,0F0H
LP:
INT 21H
PUSH DX
MOV DL,0
INT 21H
POP DX
INC DL
INC BL
CMP BX,10H
JNZ B
SUB BX,BX
PUSH DX
MOV DL,0DH
INT 21h
MOV DL,0AH
int 21h
POP DX
B: LOOP LP
MOV AH,4CH
INT 21H
CSEG ENDS
END START
我有很多种方法,这一种代码最短。。
lz是大2的吧,这个实验我几个星期前做过。。
这些实验还是自己做下比较好。要是实在做不出,再看看别人怎么写。网上很多的。。。
恩,是有个地方要改。。。
题目:将两个二进制数转换为二进制数码的ASCII码。 调用程序与子程序之间的任务分工是:调用程序提供待转换的数据,数据位数(8位,16位)和转换后存放ASCII码的首址等三个参量的地址,子程序完成二进制数的ASCII码转换。 ----------------------------------------------------------- DATA SEGMENT BIN1 DB 35H BIN2 DW 0AB48H NUM DB 8,16 ASCBUF DB 20H DUP(0) TABLE DW 3 DUP(0) DATA ENDS ..... COSEG SEGMENT ... MOV TABLE,OFFSET BIN1 MOV TABLE+2,OFFSET NUM MOV TABLE+4,OFFSET ASCBUF MOV BX,OFFSET TABLE CALL BINASC8 ... MOV TABLE,OFFSET BIN2 MOV TABLE+2,OFFSET NUM+1 MOV TABLE+4,OFFSET ASCBUF+10H MOV BX,OFFSET TABLE CALL BINASC16 -------------------------------------------------------------- -------------------------------------------------------------- 子程序如下: BINASC PROC BINASC8: MOV DI,[BX] MOV DH,[DI] JMP TRAN BINASC16: MOV DI,[BX] MOV DX,[DI] TRAN: MOV DI,[BX+2] MOV CL,[DI] XOR CH,CH MOV DI,[BX+4] LOP: ROL DX,1 MOV AL,DL AND AL,01H ADD AL,30H MOV [DI],AL INC DI LOOP LOP RET BINASC ENDP -------------------------------------------------------------- 程序是这个
;将键盘输入的ASCII码转换为二进制。;直接回车程序结束。
;.com 文件格式
code segment
main proc far
assume cs:code,ds:code
org 100h
start:
PUSH CS
POP DS
NN1:
MOV AH,02
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
mov ah,01
int 21h
cmp al,0dh
jnz goon
jmp endd
goon:
push ax
mov ah,09
lea dx,s1
int 21h
pop ax
call disp1
JMP NN1
endd:
INT 20H
S1 DB ' ASCII ========> ',24H
main endp
;--------------------------------
disp1 proc near
MOV BL,AL
mov cx,8
NEXT:
shl BL,1 ;逻辑左移
JC IS_1
MOV DL,30H
JMP XS1
IS_1:
MOV DL,31H
XS1:
MOV AH,02
INT 21H
LOOP NEXT
ret
disp1 endp
;--------------------------------
code ends
end start
以下是运行结果:
7 ASCII ========> 00110111
6 ASCII ========> 00110110
2 ASCII ========> 00110010
3 ASCII ========> 00110011
b ASCII ========> 01100010
s ASCII ========> 01110011
d ASCII ========> 01100100
h ASCII ========> 01101000
j ASCII ========> 01101010
x ASCII ========> 01111000
8 ASCII ========> 00111000
j ASCII ========> 01101010
f ASCII ========> 01100110
e ASCII ========> 01100101
CSEG SEGMENT
ASSUME CS:CSEG
START: SUB BX,BX
MOV DL,10H
MOV AH,02H
MOV CX,0F0H
LP:
INT 21H
PUSH DX
MOV DL,0
INT 21H
POP DX
INC DL
INC BL
CMP BX,10H
JNZ B
SUB BX,BX
PUSH DX
MOV DL,0DH
INT 21h
MOV DL,0AH
int 21h
POP DX
B: LOOP LP
MOV AH,4CH
INT 21H
CSEG ENDS
END START
我有很多种方法,这一种代码最短。。
lz是大2的吧,这个实验我几个星期前做过。。
这些实验还是自己做下比较好。要是实在做不出,再看看别人怎么写。网上很多的。。。
恩,是有个地方要改。。。
请参考
http://zhidao.baidu.com/question/1690966329566998468.html
参考。
答:;如果输入的是回车键,程序直接结束。;.com 文件格式 code segment main proc far assume cs:code, ds:code org 100h start:PUSH CS POP DS NN1:MOV AH, 02 MOV DL, 0DH INT 21H MOV DL, 0AH INT 21H MOV AH, 01 INT 21H CMP AL, 0DH JNZ goon goon:PUSH AX MOV AH, 09 LEA ...
答:1、打开软件Visual C++6.0,新建一个C源程序,书写C语言程序。2、首先定义两个字符型变量,代码:char c1,c2;从键盘中输入一个大写字母,代码:c1=getchar();。3、大写字母与小写字母的ASCII值相差32。代码:c2=c1+32;。将大写字母转化成小写字母。4、输出小写字母。使用putchar()函数,可以输出...
答:MOV DS, AX MOV DX, OFFSET MSG1 ;提示输入. MOV AH, 09H INT 21H MOV DX, OFFSET IN_1 ;接收键盘输入. MOV AH, 0AH INT 21H MOV DX, OFFSET CRLF ;回车换行. MOV AH, 09H INT 21H MOV DX, OFFSET BUFF ;输出原字符串. MOV AH, 09H INT 21H MOV DX, OFFSET MSG2 ;提示长度. MOV AH...
答:mov ds, ax mov ah, 1 ;键盘输入 int 21h call asc2bin mov bl, al mov bh, 0 dec bx shl bx, 1 mov dx, tab[bx]mov ah, 9 int 21h mov ax, 4c00h Int 21h main endp ;将ASCII转换为二进制数 ;入口:AL存放ASCII ;出口:转换后数值...
答:LB_1:PRINT MSG1 ;显示提示信息 MOV AH, 1 INT 21H ;输入一个字符 CMP AL, 1BH ;是[esc]?JZ EXIT CMP AL, 'A' ;小于'A'?JB LB_NO CMP AL, 'z' ;大于'z'?JA LB_NO CMP AL, 'Z' ;小于等于'Z'?JBE UUU CMP AL, 'a...
答:SS:SSEG START:MOV AX,DSEG MOV DS,AX MOV DX,OFFSET A///提示输入 MOV AH,09H INT 21H MOV AH,01H INT 21H MOV BL,AL SUB BL,20H///转换 MOV DX,OFFSET B MOV AH,09H INT 21H MOV DL,BL MOV AH,02 INT 21H//输出 MOV AH,4CH INT 21H///结束 CSEG ENDS END START ...
答:本程序最多能输入255个字符包括回车,输出统计时,第一个数字是数字字符个数,第二个是字母,第三个是其它。assume cs:code,ds:data data segment da1 db 255 da2 db ?da3 db 255 dup (?)data ends stack segment stack db 256 dup (?)stack ends code segment start:mov ax,data mov ds...
答:;输入不超过65535的10进制数,将其以16位2进制数的形式显示code segment assume cs:code org 100hstart: jmp bbbx dw 0msg1 db 10,13,'please input a number:','$'msg2 db 10,13,16 dup(0),'$'bbb: push cs pop ds push cs pop es lea dx,msg1 ...
答:程序不是很难,建议你自己写,这题的关键就是一个大小写转换问题,大写字母从41h~5Ah,小写字母从61h~7Ah,规律就是小写字母比大写字母的ASCII码大20h,所以可以用减20h实现小写转换为大写,另外还有一个方法就是,如果注意观察可以发现小写字符ASCII码2进制表示时bit5为1,而大写字母bit5为0,所以...
答:输入DB'输入一个数字:','$'输出DB 32,“结果是:','$'NUMBER DB 3 DB?DB 3 DUP(0)DSEG ENDS 的CSEG分类 假设CS:DS:CSEG,DSEG MAIN PROC FAR MOV AX,DSEG MOV DS,AX LEA DX,输入 MOV AH,9 INT 21H LEA DX,NUMBER MOV AH,0AH BR /> INT 21H LEA DX,输出 MOV AH...