初学者求高手帮忙写两个简单的汇编程序,谢谢啦~

1、试将字节数据B1拆分成两个半字节数据,分别存放于其后两个单元X和Y中。
编程提示:
数据段定义应包含B1、X、Y三个变量,其中B1变量自定义具体的数值,X、Y变量的数值由程序赋值,分别是B1的高低半个字节。该程序中需要使用逻辑操作完成半字节数据的拆分。
2.、从键盘接收一个字符串(假定输入字符串长度大于3),试换行输出该字符串中第二个字符开始的连续2个字符。
编程提示:
该程序应先使用DOS功能调用接收一个字符串,人为控制字符串长度不得小于5。显示其中的子串,要求从第二个字符开始,连续显示2个字符,该功能可使用字符串显示的DOS功能调用,也可以使用单字符显示的DOS功能调用,重复显示两次。

第1个回答  推荐于2017-12-15
第一个问题比较简单:
DATA SEGMENT
B1 DB 0FEH
X DB ?
Y DB ?
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START: MOV AX,DATA
MOV DS,AX
MOV BL,B1
MOV AL,BL
AND AL,0FH
MOV X,AL
AND BL,0F0H
MOV CL,4
SHR BL,CL
MOV Y,BL
MOV AX,4C00H
INT 21H
CODE ENDS
END START
第二题嘛方法很多,这里提供两种:
DATA SEGMENT
BUF DB 10,?,10 DUP(?),'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE , DS:DATA
START:
MOV AX , DATA
MOV DS , AX
LEA BX , BUF
MOV DX , BX
MOV AH , 0AH
INT 21H
mov dl , 0ah
mov ah , 02h
int 21h
mov dl , 0dh
mov ah ,02h
int 21h
CMP 3[BUF] , 24H
JZ ANOTHER
CMP 4[BUF] , 24H
JZ ANOTHER
CMP 5[BUF] , '$'
JNZ ANOTHER
ADD BX , 3
MOV AH , 09H
INT 21H
JMP OVER
ANOTHER:
MOV DL , 3[BUF]
MOV AH , 02H
INT 21H
mov dl , 0ah
mov ah , 02h
int 21h
mov dl , 0dh
mov ah ,02h
int 21h
MOV DL , 4[BUF]
MOV AH , 02H
INT 21H
OVER:
MOV AX , 4C00H
INT 21H
CODE ENDS
END START

这里还有一种精简的
.model small
.data
buf db 10 , ? , 10 dup(?) , '$'
.code
.startup
mov dx , offset buf
mov ah , 0ah
int 21h
mov dl , 0ah
mov ah , 02h
int 21h
mov dl , 0dh
mov ah ,02h
int 21h
mov dl , [buf+3]
mov ah , 02h
int 21h
mov dl , 0ah
mov ah , 02h
int 21h
mov dl , 0dh
mov ah ,02h
int 21h
mov dl , [buf+4]
mov ah , 02h
int 21h
.exit 0
end
完了,希望能给你提供帮助!本回答被提问者采纳
相似回答