Vit li hm C sau y bng hp ng cho 8086 (tham s ca hm truyn qua stack, gi tr tr v
lu trong thanh ghi cha) /* Hm tnh s bit 1 ca s nguyn 2 byte */ int Count(int a) { int s = 0; while (a != 0) { if ((a & 1) != 0) s++; a >>= 1; } return s; }
Bi lm: .MODEL Small .STACK 100 .DATA MSG1 DB Nhap so A: $ MSG2 DB 13,10,So bit 1 ca A la: $ .CODE MAIN PROC MOV AX,@data MOV DS,AX
MOV AH,9 LEA DX,MSG1 INT 21H
MOV AH,1 INT 21H
MOV BX,AX XOR SI,SI COUNT SHL BX JNC NHAY INC SI JMP COUNT NHAY CMP BX,0 JE THOAT JMP COUNT THOAT MOV AH,9 LEA DX,MSG2 INT 21H
MOV DX,SI INT 21H
MOV AH,4CH INT 21 MAIN ENDP END MAIN
Bi 2: Vit li hm C sau y bng hp ng cho 8086 (tham s ca hm truyn qua stack, gi tr tr v lu trong thanh ghi cha) /* Hm tnh tng cc s chia ht cho 4 ca mng N s nguyn 2 byte */ int Sum(int A[], int N) { int s = 0; for (int i = 0; i < N; i++) if (A[i] % 4 == 0) s += A[i]; return s; }
Bi lm: .MODEL Small .STACK 100 .DATA A DB 10Dup(0) MSG1 DB Nhap vao so luong N: $ MSG2 DB 13,10,Tong cua cac so chia het cho 4 la: $ .CODE MAIN PROC MOV AX,@data MOV DS,AX
MOV AH,9 LEA DX,MSG1 INT 21H
MOV AH,1 INT 21H
MOV CX,AX XOR SI,SI MOV AH,1 NHAP INT 21H MOV A[SI],AX INC SI LOOP NHAP
MOV BX,0 XOR SI,SI TONGN INT 21H XOR DX,DX ADD DX,A[SI] PUSH DX INC SI SHR DX,1 JC TONGN SHR DX,1 JC TONGN POP DX ADD BX,DX CMP SI,8 JAE THOAT JMP TONGN THOAT MOV AH,4CH INT 21H MAIN ENDP END MAIN
Bi 3: Vit li hm C sau y bng hp ng cho 8086 (tham s ca hm truyn qua stack, gi tr tr v lu trong thanh ghi cha) /* Hm tnh tng cc ch s ca mt s cho bi xu k t */ int Sum(char A[]) { int s = 0; for (int i = 0; A[i] != 0; i++) s += A[i] 48; return s; }