+ -
当前位置:首页 → 问答吧 → 小作业,求解

小作业,求解

时间:2010-12-26

来源:互联网

1,编制下面的函数值的程序(x,y的值在-128到+127之间)

  输入X,Y,输出A.
  1 x>=0,y>=0
  a={ 0 x,y异号
  -1 x<0,y<0


2.利用串比较指令实现输入字符串与已知字符串的比较.其功能是,首先输出提示:please input the password,若其用户输入:CORRECT,则输出:OK,否则提示:Error!Input again!


3.已知以BUF为首址的字存储区中存放着n个有符号二进制数,试编写程序,将其中大于0的数依此送入以BUF1为首址的字存储区,小于0的数依此送入以BUF2为首址的字存储区中

作者: d364644964a   发布时间: 2010-12-26

3.已知以BUF为首址的字存储区中存放着n个有符号二进制数,试编写程序,将其中大于0的数依此送入以BUF1为首址的字存储区,小于0的数依此送入以BUF2为首址的字存储区中

已知以BUF为首址的字存储区中存放着n个有符号二进制数,试编写程序,将其中大于等于0的数依次送入以BUF1为首址的字存储区中,小于0的数依次送入以BUF2为首址的存储区中。

分析:实现以上功能的算法为:将BUF区中的n个数逐次取出,判断其值是否大于等于0,若是,则送该数到BUF1区,否则送该数到BUF2区,如此重复,直至n个数处理完毕。由此可见,实现以上算法的程序应该是一循环程序,其循环次数为n。

寄存器分配如下:

BX:BUF存储区地址指针,初值指向BUF

SI:正数存储区地址指针,初值指向BUF1

DI:负数存储区地址指针,初指指向BUF2

CX:循环计数器,初值为BUF区中数据个数n

AX:用来暂时存放判断正负属性的数

源程序如下: 

STACK SEGMENT STACK 

  DB 200 DUP(0) 

STACK ENDS 

DATA SEGMENT 

  BUF DW –5,100,32767,-32768 

  DW –1,15,-4,-9,200,0,300 

 N = ($-BUF)/2 

 BUF1 DW N DUP(?) 

 BUF2 DW N DUP(?) 

DATA ENDS 

CODE SEGMENT 

  ASSUME CS:CODE,DS:DATA,SS:STACK 

BEGIN:MOV AX, DATA 

   MOV DS, AX 

   LEA BX, BUF 

   LEA SI, BUF1 

   LEA DI, BUF2 

  MOV CX, N 

LOPA:MOV AX,[BX] 

   CMP AX,0 

   JGE L1 

   MOV [DI],AX 

   ADD DI,2 

   JMP NEXT 

 L1:MOV [SI],AX 

   ADD SI,2 

NEXT:ADD BX,2 

   DEC CX 

   JNE LOPA 

   MOV AH,4CH 

   INT 21H 

CODE ENDS 

 END BEGIN

作者: c7752379   发布时间: 2010-12-26

第一题:用大脑运行了一下,不知道对不对。楼主可以参考一下。
最主要是一定要自已动手打一下,不然就是在拿自已的前途开玩笑噢
.data
st db 2dup(?)
.code
start:
mov dx ,offset st
mov ah09
int21h
mov al,st
mov bl,[st+1]
add al,bl
mov dl,al
mov ah,02
int 21h
end start

作者: flowerjack   发布时间: 2010-12-26

引用 1 楼 c7752379 的回复:
分析:实现以上功能的算法为:将BUF区中的n个数逐次取出,判断其值是否大于等于0,若是,则送该数到BUF1区,否则送该数到BUF2区,如此重复,直至n个数处理完毕。由此可见,实现以上算法的程序应该是一循环程序,其循环次数为n。

寄存器分配如下:

BX:BUF存储区地址指针,初值指向BUF

SI:正数存储区地址指针,初值指向BUF1

DI:负数存储区地址指针,初指指向BUF2

CX:循环计数器,初值为BUF区中数据个数n

AX:用来暂时存放判断正负属性的数

源程序如下:  

STACK SEGMENT STACK  

  DB 200 DUP(0)  

STACK ENDS  

DATA SEGMENT  

  BUF DW –5,100,32767,-32768  

  DW –1,15,-4,-9,200,0,300  

 N = ($-BUF)/2  

 BUF1 DW N DUP(?)  

 BUF2 DW N DUP(?)  

DATA ENDS  

CODE SEGMENT  

  ASSUME CS:CODE,DS:DATA,SS:STACK  

BEGIN:MOV AX, DATA  

   MOV DS, AX  

   LEA BX, BUF  

   LEA SI, BUF1  

   LEA DI, BUF2  

  MOV CX, N  

LOPA:MOV AX,[BX]  

   CMP AX,0  

   JGE L1  

   MOV [DI],AX  

   ADD DI,2  

   JMP NEXT  

 L1:MOV [SI],AX  

   ADD SI,2  

NEXT:ADD BX,2  

   DEC CX  

   JNE LOPA  

   MOV AH,4CH  

   INT 21H  

CODE ENDS  

 END BEGIN 

真够快的。。。。牛!

作者: flowerjack   发布时间: 2010-12-26